开发者问题收集

为什么 useState() 没有设置默认值?

2020-07-30
108

我创建了以下 reactComponent。据我所知,useState([]); 应该将 comments 变量设置为数组。但事实并非如此。我尝试在对象上运行 .map() 时出现异常。我必须执行 Object.values(comments) 才能使其工作,但我不明白为什么。我的 api 明确返回一个评论对象数组。

import React, { useState, useEffect } from 'react';
import axios from 'axios';

export default ({ postId }) => {
  const [comments, setComments] = useState([]);

  const fetchData = async () => {
    const res = await axios.get(
      `http://localhost:4001/posts/${postId}/comments`
    );

    setComments(res.data);
  };

  useEffect(() => {
    fetchData();
  }, []);

  const renderedComments = comments.map(comment => {
    return <li key={comment.id}>{comment.content}</li>;
  });

  return <ul>{renderedComments}</ul>;
};
1个回答

据我所知,您对状态的使用是正确的, Object.values 处理返回给您的数据这一事实意味着它肯定是一个对象或一个数组,您是否在故障排除过程中运行过 Array.isArray(res.data)

正如上面的评论者所说,最可能的情况是您从后端返回了一个对象。您可以做的其他事情来确认返回给您的数据有问题,只需注释掉您的 useEffect 并查看它是否仍会引发相同的异常。

Cory Harper
2020-07-30