【发布时间】: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