React 中 useState 的闭包陷阱:为什么定时器里拿到的总是旧值
写一个显示当前秒数的组件,用 setInterval 每秒更新,结果页面上的数字永远停在 0。这是 React 函数组件里很典型的一类问题:useState 返回的 state 在每次渲染时都是一个全新的常量,而闭包会把渲染那一刻的 state 值固定下来。定时器只创建了一次,它的回调捕获的是第一次渲染时的 state,后续渲染产生的值根本进不去。组件里还经常出现另一个变体:在 setInterval 里直接用计数变量判断是否到达上限,判断永远为 false,因为读到的是旧变量。这类 bug 在轮询、倒计时...