Reactjs useReducer-如何告知状态何时已更新

Reactjs useReducer-如何告知状态何时已更新,reactjs,react-hooks,reducers,Reactjs,React Hooks,Reducers,使用useReducer管理状态时,内部状态更新会延迟 也就是说,如果我要用类似 const [state, dispatch] = useReducer(reducer, {prop: ""}) this.setState({ propName: "newPropValue" }, () => { // state.propName would have value of "newPropValue" here }) 。。。然后再打电话给一个这样的调度 dispatch(

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

也就是说,如果我要用类似

const [state, dispatch] = useReducer(reducer, {prop: ""})
this.setState({
   propName: "newPropValue"
}, () => {
   // state.propName would have value of "newPropValue" here
})
。。。然后再打电话给一个这样的调度

dispatch({
   type: 'ACTION_THAT_UPDATES_PROP'
});
console.log(state.prop)
。。。由于延迟状态更新,“state.prop”的值将不包含新值

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

const [state, dispatch] = useReducer(reducer, {prop: ""})
this.setState({
   propName: "newPropValue"
}, () => {
   // state.propName would have value of "newPropValue" here
})

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

方法是使用
useffect

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

好了,不,没有useState mutator回调,它将在下一个渲染周期中可用。。。我不确定您为什么要在同一个周期中使用此值,但您可以将调度包装在useEffect钩子中,并在其依赖项数组中使用
state
值,或者您可以创建一个自定义的“useStateWithCallback”钩子,该钩子在使用该新值的构造函数中使用回调函数,但这更像是一种代码气味或钩子反模式。如果你想使用新的状态值进行操作,那么使用
useffect
对新的
state.prop
值进行操作。来源于source code@TalgatSaribayev-wow,谢谢你帮我找到了大海捞针。向上投票!