本节中,倒计时会每秒减2

来源:4-4 倒计时组件

Constandine

2022-04-10

源代码如下
useEffect(() => {
const id = setInterval(() => {
setCount((count) => {
if (count === 0) {
clearInterval(id);
onEnd && onEnd();
return count;
}
return count - 1;
});
return () => {
clearInterval(id);
};
}, 1000);
}, [time, onEnd]);
当我改成return count - 0.5时,功能是正常的
我使用的React版本是18,讲师的版本是17,会不会是这个问题?

写回答

3回答

慕桂英2364040

2022-04-18

原因是React18的StrictMode在development环境下useEffect会执行两次,目的是确保useEffect中的副作用是幂等的,解决方法是useEffect的回调函数所返回的函数中要清除定时器。楼主清除定时器的位置写错了。

4
0

Tomas

2022-04-21

有个同学回答正解,useEffect 清除函数位置写错了,代码已改正上传到 master 了

0
0

Tomas

2022-04-10

如果代码完全一样的话切成 17 版本试试呢

0
5
Tomas
这个问题参考下之前回答哈
2022-12-01
共5条回复

Next.js+React+Node系统实战,搞定SSR服务器渲染

Next.js+React+Node系统实战,搞定SSR服务器渲染

421 学习 · 144 问题

查看课程