提问人:FiFi 提问时间:4/2/2022 最后编辑:FiFi 更新时间:4/2/2022 访问量:123
useEffect 处于无限循环中。如何解决这个问题?
useEffect goes in an infinite loop. How to fix this?
问:
请更改此代码,以便 useEffect 不会一次又一次地调用自身。在这里,我从后端获取数据并更新 useEffect 中的状态,useEffect 本身就是依赖项。有没有一些简单的方法可以解决它?
我的用例: 我使用表单添加帖子,提交表单后,我希望它立即显示更新的帖子列表。“帖子”是一个组件,其中更新的帖子列表作为道具传递,每个单独的帖子都在组件“帖子”中呈现。因此,我想在提交表单后将更新的帖子列表传递给“帖子”
useEffect(() => {
async function readPosts(){
try {
const res = await axios.post(backendLink + '/post/profile/read');
setPosts(res.data.posts);
} catch (err) {
console.log(err);
}
}
readPosts();
}, [posts])
答:
1赞
Khant
4/2/2022
#1
useEffect(() => {
async function readPosts(){
try {
const res = await axios.post(backendLink + '/post/profile/read');
setPosts(res.data.posts);
} catch (err) {
console.log(err);
}
}
readPosts();
}, []) // Change here
评论
0赞
FiFi
4/2/2022
不过,我不想只在第一次渲染中调用它
0赞
Andy
4/2/2022
那你想什么时候叫它呢?您的用例是什么?@FiFi
1赞
Khant
4/2/2022
然后不要使用 useEffect 并创建一个函数,该函数在按下按钮时调用 readPost。
0赞
FiFi
4/2/2022
我使用表单添加帖子,提交表单后,我希望它立即显示更新的帖子列表。“帖子”是一个组件,其中更新的帖子列表作为道具传递,每个单独的帖子都在组件“帖子”中呈现。因此,我想在提交表单后将更新的帖子列表传递给“帖子”
1赞
FiFi
4/2/2022
@Andy 从你的最新回复中得到了我需要的东西。非常感谢Khant和Andy。
0赞
huzzzus
4/2/2022
#2
这就是您的代码中现在发生的情况。
useEffect 在“posts”值更改时触发。 useEffect 更改了“帖子” 触发 useEffect,因为 useEffect 更改了“帖子”
这是一个无限循环。从依赖项中删除 [帖子] 并找到解决方法。
评论
posts
useEffect
posts
posts