javascript 有人能解释一下为什么在我使用条件设置状态时React状态没有更新吗?[duplicate]

du7egjpx  于 2022-12-02  发布在  Java
关注(0)|答案(2)|浏览(120)

此问题在此处已有答案

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的新手,所以我很好奇这里发生了什么。

li9yvcax

li9yvcax1#

setstate是异步的。请使用useEffect来捕获对状态的更改

useEffect(() => {
      missionState.mission_summary.length > 0 ? setInProgress(true) : setInProgress(false);
      console.log(missionState.mission_summary.length > 0) // false
     
}, []);

useEffect(() => {
   console.log(inProgress) 
}, [inProgress])
kupeojn6

kupeojn62#

问题在于,当setState是异步的时候,你试图从setState中获取和更新值。你应该尝试监听另一个useEffect上的inProgress变化,或者创建一个useCallback函数来监听“inProgress”变化并以更新的值响应。

相关问题