React - useState - 为什么setTimeout函数没有最新的状态值?
- 论坛
- React - useState - 为什么setTimeout函数没有最新的状态值?
9 浏览
React - useState - 为什么setTimeout函数没有最新的状态值?
最近我在研究React Hooks的时候遇到了一个问题/疑惑。
下面是一个基本的实现来复现这个问题,这里我只是在按钮点击时切换了flag
(一个状态)变量。
const [flag, toggleFlag] = useState(false); const data = useRef(null); data.current = flag; const _onClick = () => { toggleFlag(!flag); // toggleFlag(!data.current); // 可行 setTimeout(() => { toggleFlag(!flag); // 为什么没有最新的值? // toggleFlag(!data.current); // 可行 }, 2000); }; return ( );
我找到了一些其他方法来解决这个问题,比如使用useRef或useReducer,但这是否正确,或者是否有其他仅使用useState解决的方法?
另外,如果有人能解释一下为什么在setTimeout内部我们获得的是旧的状态值,那将非常有帮助。
Sandbox网址 - https://codesandbox.io/s/xp540ynomo