我正在使用功能组件。我知道异步setColor
更改的值。color
但是,我的回调函数没有收到color
(blue) 的更新版本,即使它在color
更新后执行得很好。这是我的代码的抽象版本:
let [color, setColor] = useState("red");
useEffect(() => {
setColor("blue");
setTimeout(() => {
console.log(color);
}, 5000)
}, []);
(这是一个沙箱:https ://codesandbox.io/s/falling-cherry-17ip2?file=/src/App.js )
我唯一的猜测是该setColor
函数几乎创建了一个新color
变量 &console.log
被困在引用旧的color
.
故障排除
我知道辅助
useEffect
有可能在状态更改时执行我的回调。但是,这很不方便,因为我正处于复杂逻辑的中间,我只希望回调在某些条件下执行。我也知道
useRef
变量会立即更新,因此这是一个替代方案。
尽管如此,问题仍然存在:为什么没有color
被记录的更新值以及我可以在主节点中做些什么useEffect
来访问最新版本的color
状态?