最近我在研究 React Hooks 并且遇到了一个问题/疑问?
下面是重现问题的基本实现,在这里我只是flag在单击按钮时切换(状态)变量。
const [flag, toggleFlag] = useState(false);
const data = useRef(null);
data.current = flag;
const _onClick = () => {
toggleFlag(!flag);
// toggleFlag(!data.current); // working
setTimeout(() => {
toggleFlag(!flag); // does not have latest value, why ?
// toggleFlag(!data.current); // working
}, 2000);
};
return (
<div className="App">
<button onClick={_onClick}>{flag ? "true" : "false"}</button>
</div>
);
我想出了一些其他方法来解决这个问题,比如使用 useRef 或 useReducer,但是这是正确的还是有其他方法可以只用 useState 来解决这个问题?
此外,如果有人解释为什么我们在 setTimeout 中获得旧的 state 值,那将非常有帮助。