useReducer - 如何判断状态何时更新

useReducer - how to tell when state has been updated

使用useReducer管理状态时,内部状态更新被延迟。

即如果我要用

之类的东西初始化减速器
const [state, dispatch] = useReducer(reducer, {prop: ""})

...然后像这样调用调度...

dispatch({
   type: 'ACTION_THAT_UPDATES_PROP'
});
console.log(state.prop)

...由于延迟状态更新,"state.prop" 的值将不包含新值。

有没有办法获取最新更新的状态?换句话说,我正在寻找 React 的 setState 方法提供的类似机制,您可以在其中执行类似

this.setState({
   propName: "newPropValue"
}, () => {
   // state.propName would have value of "newPropValue" here
})

您可以访问它,但不能在函数体中访问,也不能在调度后直接访问,因为需要先更新状态。 React 的状态和生命周期要求新状态在当前状态的上下文中不可接近。

这样做的方法是使用useEffect:

 React.useEffect(() => {
    console.log(state.prop)
  }, [state.prop]);