在useEffect中修改state
来源:14-16 Hooks使用中的几个注意事项

_驺虞
2021-06-03
function useStateTrap() {
const [count, setCount] = useState(0);
useEffect(() => {
const timer = setInterval(() => {
setCount(count + 1);
console.log("setInterval", count);
}, 1000);
return () => clearInterval(timer);
}, []);
return <div>count:{count}</div>;
}
页面显示count
为1,说明setCount(count + 1)
生效了,因为count
初始值是0,那么请问打印结果为什么依然是 setInterval 0
?
写回答
1回答
-
双越
2021-06-03
这就跟 class 组件里的 setState 一样,异步更新。
你刚刚 setState({...}) 之后,没法在同步代码中获取最新的 state 的值,除非用回调函数。
可以再去回顾一下 class 组件的 setState ,当时讲的挺详细的。
022021-06-04
相似问题