【发布时间】:2021-11-07 23:46:26
【问题描述】:
我有一个组件会触发一个计时器,该计时器每 30 秒更新一次并发出 axios 请求。它使用useRef,它设置为在触发handleStart 函数后每30 秒更新一次。
const countRef = useRef(null);
const lastUpdatedRef = useRef(null);
const [lastUpdated, setLastUpdated] = useState(Date.now())
const handleStart = () => {
countRef.current = setInterval(() => {
setTimer((timer) => timer + 1);
}, 1000);
lastUpdatedRef.current = setInterval(() => {
setLastUpdated(Date.now());
}, 30000);
};
现在我有一个useEffect,每当lastUpdated 作为依赖项被触发时,它每30 秒运行一次calculate 函数:
const firstCalculate = useRef(true);
useEffect(() => {
if (firstCalculate.current) {
firstCalculate.current = false;
return;
}
console.log("calculating");
calculateModel();
}, [lastUpdated]);
这会根据 lastUpdatedRef 每 30 秒(00:30、01:00、01:30 等)更新 calculate 函数。但是,我希望计时器在 lastUpdated 状态在其他地方被修改时重新启动(例如,如果 lastUpdated 在 00:08 被修改,下一次更新将是 00:38、01:08、01:38 等) .有没有办法做到这一点?
【问题讨论】:
-
旁注:Dan Abramov 的article on
setIntervalinuseEffect读起来很有趣。
标签: javascript reactjs react-hooks setinterval use-effect