gpt4 book ai didi

reactjs - 分派(dispatch)操作后状态不会更新

转载 作者:行者123 更新时间:2023-12-02 20:17:33 27 4
gpt4 key购买 nike

我是 Redux 新手。我必须调度一个操作来更新应用程序的状态,然后使用更新状态来调用我的后端。我使用 thunkMiddleware

const mapDispatchToProps = dispatch => bindActionCreators({
login: (user) => dispatch => {
dispatch(loginAction())
console.log('user.loggedIn after loginAction dispatching is', user.loggedIn)
}
}, dispatch)

我预计immediately在调用 dispatch 之后,我的状态(以及映射到它的所有 Prop )将收到更新的值。然而,这种情况并没有发生:dispatch 调用之后的代码仍然观察更新之前的状态(即,在我的示例中,false 被打印)到控制台)。

是否按照设计,即使我调度一个操作来更新状态,我也不会在同一函数中观察到更新的状态?或者我做错了什么?预先感谢您!

复制项目可用here .

最佳答案

另外两条评论至少部分不正确。

默认情况下,调度操作是 100% 同步的,假设没有中间件拦截该操作并延迟它。一旦 dispatch() 返回,存储状态就会更新。 @ageoff 的示例是正确的,您可以在分派(dispatch)后再次在 thunk 中调用 getState() 并查看更新后的状态。

您的代码示例中有两个问题。

首先,在调度之后,React 没有机会重新渲染,因此组件的 props 不会改变。

其次,您的 reducer 应该返回一个新对象来响应该操作,因此现有的 user 对象将不会成为更新的引用。事实上,如果您正确执行不可变更新,旧的 user 对象将永远改变。当组件重新渲染时,它应该获得 props.user 的新值以及更改。

关于reactjs - 分派(dispatch)操作后状态不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com