如何等待useReducer调度更新状态?

时间:2020-08-10 06:35:51

标签: reactjs react-hooks use-reducer

如何等待分派更新状态?在useReducer API文档中没有找到任何内容,在TypeScript类型定义中也没有找到任何指示。

这是我尝试过但没有奏效的东西:

await new Promise<void>((resolve) => {
  dispatch({ type: DO_SOMETHING, something });
  resolve();
});

console.log(state.something); // still the old version

2 个答案:

答案 0 :(得分:2)

我如何等待调度更新状态?

你不能。

在任何特定的渲染中,组件的状态和属性都不会改变,它们在该渲染中是恒定的。组件必须重新渲染才能看到新的prop和状态值。

在您的情况下,您只能在reducer函数更新了组件的状态并重新渲染了组件之后才能访问更新的状态。

答案 1 :(得分:0)

您需要自己创建的等待状态

例如

dispatch(doSomethingAction())

const doSomeThingAction = () => {
   dispatch({type: 'LOADING'})

   // do something 
   .
   .
   .
   .
   // something has done
   dspatch({ type: SUCCESS, something });
}