【问题标题】:useReducer - how to tell when state has been updateduseReducer - 如何判断状态何时更新
【发布时间】:2020-01-08 19:57:42
【问题描述】:

使用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
})

【问题讨论】:

  • AFAIK,不,没有 useState mutator 回调,它只会在下一个渲染周期中可用......我不确定你为什么要在同一个值中使用这个值循环,但是您可以将调度包装在 useEffect 挂钩中,并在其依赖项数组中使用 state 值,或者您可以创建一个自定义的“useStateWithCallback”挂钩,该挂钩在使用该新值的构造函数中采用回调函数,但这似乎更像是代码气味或钩子反模式。如果你想用新的状态值做一些事情,那么使用useEffect 对新的state.prop 值进行操作。
  • @TalgatSaribayev - 哇,谢谢你帮我在大海捞针。点赞!

标签: reactjs react-hooks reducers


【解决方案1】:

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

这样做的方法是使用useEffect:

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

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多