如何等待 useReducer 调度更新状态?
How do I wait for a useReducer dispatch to update the state?
如何等待调度更新状态?我在 useReducer API 文档中没有找到任何内容,在 TypeScript 类型定义中也没有找到任何指示。
这是我尝试过但没有奏效的方法:
await new Promise<void>((resolve) => {
dispatch({ type: DO_SOMETHING, something });
resolve();
});
console.log(state.something); // still the old version
How can I wait for a dispatch to have updated the state?
你不能。
在任何特定的渲染中,组件的状态和道具都不会改变,它们在该渲染中是不变的。组件必须 re-render 才能看到新的道具和状态值。
在您的情况下,您只能在 reducer 函数更新了组件的状态并且组件已 re-rendered 之后访问更新后的状态。
需要自己创建的等待状态
例如
dispatch(doSomethingAction())
const doSomeThingAction = () => {
dispatch({type: 'LOADING'})
// do something
.
.
.
.
// something has done
dspatch({ type: SUCCESS, something });
}
如何等待调度更新状态?我在 useReducer API 文档中没有找到任何内容,在 TypeScript 类型定义中也没有找到任何指示。
这是我尝试过但没有奏效的方法:
await new Promise<void>((resolve) => {
dispatch({ type: DO_SOMETHING, something });
resolve();
});
console.log(state.something); // still the old version
How can I wait for a dispatch to have updated the state?
你不能。
在任何特定的渲染中,组件的状态和道具都不会改变,它们在该渲染中是不变的。组件必须 re-render 才能看到新的道具和状态值。
在您的情况下,您只能在 reducer 函数更新了组件的状态并且组件已 re-rendered 之后访问更新后的状态。
需要自己创建的等待状态
例如
dispatch(doSomethingAction())
const doSomeThingAction = () => {
dispatch({type: 'LOADING'})
// do something
.
.
.
.
// something has done
dspatch({ type: SUCCESS, something });
}