【发布时间】:2022-01-04 21:57:26
【问题描述】:
我尝试使用应该从 API 获取数据的 useEffect() 挂钩更新“提交”状态变量。但是在我执行setSubmissions(result.data) 然后将提交变量传递给Table 组件<Table data={submissions} /> 之后,它会导致错误TypeError: Cannot convert undefined or null to object,这告诉我我没有成功地将提交变量从API 获取更新为数组。
export default function Dashboard() {
const [submissions, setSubmissions] = useState([]);
useEffect(() => {
async function loadData() {
const query = `query {submissionsList {
user_id type quantity impact date}
}`;
const response = await fetch ('http://localhost:8000/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json'},
body: JSON.stringify({ query })
});
const result = await response.json()
setSubmissions(result.data);
}
loadData();
}, []);
return (
<Grid container spacing={4}>
<Grid item xs={12}>
<Widget>
<Table data={submissions} />
</Widget>
</Grid>
</Grid>)}
【问题讨论】:
-
记录
result的结果是什么?在我看来,api 正在响应undefined。 -
@GhostOrder 出于某种原因,console.log 在
useEffect()挂钩之外工作,但不会在其中记录任何内容。 -
你需要从
useEffect内部console.logresult,因为result在useEffect范围内,它不存在于它之外。 -
同意,但由于某种原因,
console.log内的useEffect不起作用... -
您是否尝试记录其他数据(例如纯字符串)只是为了测试问题是否出在 console.log 上? (我对此表示怀疑,但以防万一),或者尝试记录
result+ 类似console.log('this is the result' + result)的字符串。顺便说一句,react 是否会通知您一些错误?另一种可能性是您的服务器可能正在响应一个空字符串。
标签: reactjs react-hooks graphql use-effect use-state