调用次数过多时,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 上替换了其他测试函数,它产生了相同的结果。所以基本上,当定义第二个函数时它不会起作用。出了什么问题?
用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])
我有一个 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 上替换了其他测试函数,它产生了相同的结果。所以基本上,当定义第二个函数时它不会起作用。出了什么问题?
用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])