You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Redux Toolkit时首次添加购物车项无法通过useSelector获取的问题

Redux Toolkit购物车添加商品后useSelector未更新的问题解决

核心问题出在Redux Toolkit reducer的写法上:你直接对state变量进行赋值操作,绕过了Immer的不可变更新追踪机制。

Redux Toolkit的createSlice依赖Immer库实现便捷的不可变更新——它允许你在reducer里"直接修改"state(实际是生成不可变的新状态),但如果执行state = merge(state, action.payload),只是把局部变量state指向了新对象,Immer并没有追踪到原state对象的变化,导致Redux store的更新未被正确触发,组件也就不会重新渲染获取新数据。

两种正确写法

1. 直接修改原state对象(利用Immer代理)

让lodash的merge直接修改Immer代理的state对象,Immer会自动处理不可变更新:

updateByPayload: (state, action: PayloadAction<Cart>) => {
  merge(state, action.payload);
}

2. 返回新的状态对象

手动创建新对象并返回,符合Redux的不可变更新原则,也能被正确追踪:

updateByPayload: (state, action: PayloadAction<Cart>) => {
  return merge({}, state, action.payload);
}

内容的提问来源于stack exchange,提问作者gerdo smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:50:31