Javascript setState in useffect循环应用程序

Javascript setState in useffect循环应用程序,javascript,reactjs,lodash,Javascript,Reactjs,Lodash,为什么我会得到无限循环错误?React是指标有*的行: function Blog(){ const[blog,setBlog]=useState({}); const query=useQuery(); 异步函数takeBlog(查询){ const_data=await(await fetch(`${root}/api/blog/${query}').json(); console.log(_data.blog) setBlog(u.get(_data,'blog',{}));//* } u

为什么我会得到无限循环错误?React是指标有
*
的行:

function Blog(){
const[blog,setBlog]=useState({});
const query=useQuery();
异步函数takeBlog(查询){
const_data=await(await fetch(`${root}/api/blog/${query}').json();
console.log(_data.blog)
setBlog(u.get(_data,'blog',{}));//*
}
useffect(()=>{
takeBlog(查询);
}, []);
返回(
);
}
导出默认博客;

给你一个解决方案

function Blog(){
const[blog,setBlog]=useState({});
const query=useQuery();
异步函数takeBlog(查询){
const_data=await(await fetch(`${root}/api/blog/${query}').json();
console.log(_data.blog)
setBlog(u.get(_data,'blog',{}));//*
}
useffect(()=>{
const keys=Object.keys(blog);
如果(!keys.length){
takeBlog(查询);
}
}, []);
返回(
);
}

导出默认博客不是一个直接的答案,但根据您所拥有的,我不确定您是否需要
useState
useffect
钩子的所有复杂性。似乎
blog
从未更改,而且
takeBlog
只被调用过一次。这难道不是:
constquery=useQuery()
const\u data=await(await-fetch(
${root}/api/blog/${query}
).json()
const blog=u.get(_data,'blog',{})
然后完全删除
useState
useffect
挂钩。编辑:对糟糕的注释格式表示歉意。@Tom,很可能组件会变得更大,并且会包含状态变量,因此在任何情况下,我都必须返回到这个实现。此外,官方文件说,在提出请求的情况下,我们必须做到这一点。