类组件和函数组件定时器每秒加1的区别?-灵析社区

猫界袁隆平

有大佬帮忙看看这两种的区别吗,功能就是定时器每秒加1 函数组件 useEffect(() => { let timer = setInterval(() => { setCount(a + 1); }, 1000); return () => { clearInterval(timer) } }, []); 类组件 componentDidMount() { this.timer = setInterval(() => { const { n } = this.state this.setState({ n: n+1 }) }, 1000); } 为啥类组件可以实现功能,函数组件不行呢?写成函数形式就都可以实现

阅读量:132

点赞量:0

问AI
这就是react经典的闭包陷阱了,原因是在函数组件中,a的值一直是初始值,有几种方案可以解决: 1、把a加到useEffect的第二个参数中,即: useEffect(() => { let timer = setInterval(() => { setCount(a + 1); }, 1000); return () => { clearInterval(timer) } }, [a]); 2、利用函数更新: useEffect(() => { let timer = setInterval(() => { setCount(p => p + 1); }, 1000); return () => { clearInterval(timer) } }, []); 3、用useRef保存count的值 闭包陷阱可以搜索引擎搜一下,有很多相关的内容