ran*_*ing 1 reactjs redux redux-toolkit
今天我有一个错误,useSelector当我的 redux 状态改变时,我正在使用的组件不会重新渲染。快速阅读createSlice文档后,我注意到他们正在返回state.something = action.payload,而我没有这样做。
所以在这段代码中:
const personSlice = createSlice({
name: "person",
initialState,
reducers: {
setToken: (state, action) => {
state.token = action.payload;
},
setUser: (state, action) => {
state = { ...state, ...action.payload };
},
},
});
Run Code Online (Sandbox Code Playgroud)
当我设置令牌时,我的应用程序会更新并且运行良好。但是在分派setUser动作之后,我依赖于person状态的组件没有被重新渲染。但是为什么当我设置令牌而不返回时它会起作用?
我把我的代码改成这样:
const personSlice = createSlice({
name: "person",
initialState,
reducers: {
setToken: (state, action) => {
state.token = action.payload;
},
setUser: (state, action) => {
return state = { ...state, ...action.payload };
},
},
});
Run Code Online (Sandbox Code Playgroud)
一切正常,即使没有returnin setToken。
所以我想我的最终问题是,切片中究竟发生了什么,为什么以及我需要从动作中返回什么?
createSlice在里面使用 Immer。Immer 通过以下任一方式工作:
state,例如state.x = 123分配state = anything不是突变,它不会返回任何内容。它只是将名为state的局部变量重新分配为指向其他内容。
如果您想“合并”一些数据,那么是的,您需要使用return {...state, ...someData}或Object.assign(state, someData)来“改变”现有state对象。
请参阅Redux Toolkit“Writing Reducers with Immer”使用指南,其中涵盖了该主题。
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |