【发布时间】:2019-08-07 11:20:45
【问题描述】:
最近我正在研究 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 中获得旧的状态值,那将非常有帮助。
【问题讨论】:
标签: javascript reactjs react-hooks