React Lifecycles 管理具有变化值的间隔
React Lifecycles managing intervals with changing values
在我的一个组件中,我有一个 useEffect
设置,其中设置了一个间隔来获取函数。
基本设置如下:
...
const token = useToken() // custom hook that updates whenever access_token updates
const fetchData = useCallback(() => {
callAPI(token)
}, [token])
useEffect(() => {
if (!token) return
fetchData()
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [token]}
...
它应该每 60 秒 fetchData
一次。
它还需要做的(它不需要做的)是每当 token
更新时,它都应该考虑到这一点。
我目前尝试解决的问题是清除令牌更改的时间间隔并重新开始该过程。但我认为我在上述尝试中处理不当。
知道如何正确完成此操作吗?
唯一缺少的是 fetchData
应该添加到依赖项数组以确保 useEffect
使用更新的回调
useEffect(() => {
if (!token) return
fetchData()
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [token, fetchData])
但是你也可以把fetchData
(这次fetchData
不用跟useCallback
一起背)函数移到useEffect
里面,这样你只能将令牌作为依赖项:
useEffect(() => {
const fetchData = () => {
if(!token) return;
callAPI(token)
};
fetchData();
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [token])
编辑:
您可以通过以下方式从 useEffect
中删除令牌:
const fetchData = useCallback(() => {
if(!token) return; // moved the token check here
callAPI(token)
}, [token])
useEffect(() => {
fetchData();
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [fetchData])
在我的一个组件中,我有一个 useEffect
设置,其中设置了一个间隔来获取函数。
基本设置如下:
...
const token = useToken() // custom hook that updates whenever access_token updates
const fetchData = useCallback(() => {
callAPI(token)
}, [token])
useEffect(() => {
if (!token) return
fetchData()
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [token]}
...
它应该每 60 秒 fetchData
一次。
它还需要做的(它不需要做的)是每当 token
更新时,它都应该考虑到这一点。
我目前尝试解决的问题是清除令牌更改的时间间隔并重新开始该过程。但我认为我在上述尝试中处理不当。
知道如何正确完成此操作吗?
唯一缺少的是 fetchData
应该添加到依赖项数组以确保 useEffect
使用更新的回调
useEffect(() => {
if (!token) return
fetchData()
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [token, fetchData])
但是你也可以把fetchData
(这次fetchData
不用跟useCallback
一起背)函数移到useEffect
里面,这样你只能将令牌作为依赖项:
useEffect(() => {
const fetchData = () => {
if(!token) return;
callAPI(token)
};
fetchData();
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [token])
编辑:
您可以通过以下方式从 useEffect
中删除令牌:
const fetchData = useCallback(() => {
if(!token) return; // moved the token check here
callAPI(token)
}, [token])
useEffect(() => {
fetchData();
const interval = setInterval(fetchData, 60000)
return () => {
clearInterval(interval)
}
}, [fetchData])