【发布时间】:2021-08-16 09:44:03
【问题描述】:
我设置了一个 Cloud Firebase 数据库,我正在向它发出 fetch 请求,但是当我尝试遍历返回对象中的数组时,我得到 TypeError: Cannot read property 'forEach' of undefined,但我不确定为什么......我看到了一些帖子建议 JSON.parse res 但它没有改变输出..
import React, { useState, useEffect } from "react";
import axios from "axios";
const Submissions = () => {
const [state, setState] = useState({});
useEffect(() => {
axios
.get("/submissions")
.then((res) => {
setState({
submissions: res.data,
});
})
.catch((err) => {
console.error(err);
});
// eslint-disable-next-line
}, []);
return (
<div style={{ paddingTop: "3rem" }}>
<h1>Submissions</h1>
{state.submissions !== null &&
state.submissions.forEach((element) => {
<p>{element.patientName}</p>;
})}
</div>
);
};
export default Submissions;
如果我返回以下内容而不是迭代数组:
<p>{JSON.stringify(state)}</p>
但我确实得到了我期望的虚拟数据响应:
{"submissions":[{"submissionId":"NxkofnOyiZSjpBa918it","patientName":"Bobby Hill","onsetDate":"2021-05-28T01:41:44.368Z","immuno":true,"highrisk":false,"symptoms":true,"collectionDate":"2021-05-28T01:41:44.368Z","createdAt":"2021-05-28T01:42:00.042Z"},{"submissionId":"PuyDsvIlNC5Mi1h5u7b5","patientName":"Theo","onsetDate":"2021-05-28T01:20:06.275Z","immuno":false,"highrisk":false,"symptoms":false,"collectionDate":"2021-05-28T01:20:06.275Z","createdAt":"2021-05-28T01:20:06.275Z"}]}
【问题讨论】:
-
你可以去掉
state.submissions!==null并用state.submissions?.map替换state.submissions.forEach。其中?称为optional chaining 运算符。.forEach不返回数组,但您需要这样做,这就是我们使用.map的原因。还要在<p>{element.patientName}</p>之前添加return前缀。
标签: json reactjs google-cloud-firestore axios typeerror