Redux Toolkit createSlice状态未更新排查(action已触发)
问题原因与解决方案
核心问题
在setSelectedMinifigX的reducer函数中,你直接使用state = action.payload对state变量赋值,这会绕过Redux Toolkit依赖的Immer库的状态追踪机制,导致Redux无法感知到状态变化,最终组件获取的始终是初始空对象。
修复方案
Redux Toolkit的createSlice允许两种正确的状态更新方式,针对你完全替换整个state对象的场景,推荐以下两种写法:
方案1:直接返回新状态对象
这种方式最简洁,适合完全替换整个state的场景:
import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { SelectedMinifig } from "types"; const initialState = {} as SelectedMinifig; const selectedMinifigSlice = createSlice({ name: "selectedMinifigX", initialState, reducers: { setSelectedMinifigX(state, action: PayloadAction<SelectedMinifig>) { console.log("state and action payload from slice", state, action.payload); return action.payload; // 直接返回新状态,Immer会处理不可变更新 }, }, }); export default selectedMinifigSlice.reducer; export const { setSelectedMinifigX } = selectedMinifigSlice.actions;
方案2:使用Immer的可修改语法(适合部分更新场景)
如果后续需要对state对象做部分属性更新,可以用这种方式:
setSelectedMinifigX(state, action: PayloadAction<SelectedMinifig>) { console.log("state and action payload from slice", state, action.payload); // 将payload的属性合并到现有state对象中 Object.assign(state, action.payload); }
其他验证点
你的rootReducer配置、action绑定逻辑(useDispatchAction)以及组件的mapStateToProps写法都是正确的,修复reducer中的状态更新逻辑后,组件就能正常获取到更新后的state.selectedMinifigX。
内容的提问来源于stack exchange,提问作者Kiszuriwalilibori
相关产品推荐
相关产品推荐

