提问人:FiFi 提问时间:4/26/2022 更新时间:4/26/2022 访问量:66
useEffect 调用在调用次数过多时停止工作。为什么?
useEffect calls stop working when called too many times. Why?
问:
我有一个useEffect,这样做时可以正常工作。
async function readUserPosts(profileID){
try {
const res = await axios.post(...);
setUserPosts(res.data.posts);
} catch (err) {
console.error(err);
}
}
useEffect(() => {
readUserPosts(profileID);
}, [profileID])
但是,如果我通过添加第二个函数来定义相同的useEffect,如下所示:
async function readUserPosts(profileID){
try {
const res = await axios.post(...);
setUserPosts(res.data.posts);
} catch (err) {
console.error(err);
}
}
useEffect(() => {
readUserPosts(profileID);
functionX();
}, [profileID])
useEffect 在我重新加载页面的前几次起作用,之后它停止工作。我没有收到任何错误消息,即使我将 try catch 包裹在 2 个函数周围。FunctionX 是一个简单的异步函数。我在 functionX 上替换了其他测试函数,它产生了相同的结果。所以基本上,当定义第二个函数时,它将不起作用。哪里出了问题?
答:
1赞
Md Wahidul Azam
4/26/2022
#1
用 useCallback 将这两个方法括起来。例如,下面是一种方法:
const readUserPosts = useCallback(async function() {
try {
const res = await axios.post(...);
setUserPosts(res.data.posts);
} catch (err) {
console.error(err);
}
}, []);
并尝试像这样添加依赖项:
useEffect(() => {
readUserPosts(profileID);
functionX();
}, [profileID, readUserPosts, functionX])
评论
0赞
Md Wahidul Azam
4/26/2022
下面是一个包含虚假 API 调用的代码沙盒: codesandbox.io/s/serene-nova-yh69sm?file=/src/App.js
0赞
FiFi
4/26/2022
我让它工作,但我必须添加 userID 作为 2 个函数的依赖项。谢谢。
评论