此问题在此处已有答案:
The useState set method is not reflecting a change immediately(16个答案)
14小时前就关门了。
我有以下代码
const [inProgress, setInProgress] = useState(value);
useEffect(() => {
missionState.mission_summary.length > 0 ? setInProgress(true) : setInProgress(false);
console.log(missionState.mission_summary.length > 0) // false
console.log(inProgress) // true
});
在最后两行中,我记录了输出。我假设inProgress
应该是false
,因为设置它的条件是false
。我是React的新手,所以我很好奇这里发生了什么。
2条答案
按热度按时间li9yvcax1#
setstate是异步的。请使用
useEffect
来捕获对状态的更改kupeojn62#
问题在于,当setState是异步的时候,你试图从setState中获取和更新值。你应该尝试监听另一个useEffect上的inProgress变化,或者创建一个useCallback函数来监听“inProgress”变化并以更新的值响应。