【发布时间】:2022-01-03 18:30:34
【问题描述】:
我是 ReactJS 的新手,我现在正在尝试做一个交互式 cmets 部分(取自 frontendmentor.io),但 App 组件只是没有显示它应该显示的内容
这是我的App 组件:
function App() {
const [data, setData] = useState([]);
useEffect(() => {
const getComm = async () => {
await fetchData();
};
getComm();
}, []);
console.log(data);
const fetchData = async () => {
const res = await fetch("db.json").then(async function (response) {
const comm = await response.json();
setData(comm);
return comm;
});
};
return (
<Fragment>
{data.length > 0 ? <Comments data={data} /> : "No Comments to Show"}
</Fragment>
);
}
export default App;
console.log(data) 记录两次:
- 第一次是空数组;
- 第二次是包含我的数据的数组。
如果我强制 App 打印 Comments 它只是说不能映射到未定义的变量
这是我的Comments 组件:
function Comments({ data }) {
return (
<div>
{data.map((c) => (
<Comment key={c.id} />
))}
</div>
);
}
export default Comments;
我想知道为什么页面仍然显示No Comments to Show即使日志是正确的
【问题讨论】:
-
您的 cmets 组件中有什么?
-
您的屏幕截图显示
data是一个对象而不是数组,因此它没有length或map属性。你的意思是data.comments?您不能只忽略数据结构的一些部分,并期望 JS 猜测您的意思是哪个属性。
标签: javascript reactjs asynchronous