reactjs - 如何使用 React 和 TypeScript 修改 reduxjs/toolkit 中的状态
问题描述
当我使用 react-redux 时,我更新了这样的状态:
case CartActionTypes.ADD_ITEM:
return {
...state,
cartItems: [...cartItems, { action.payload }];
};
现在我将 reduxjs/toolkit 与切片等一起使用。
我应该以相同的方式更新状态还是使用 .push 方法,如下所示:
export const cartSlice = createSlice({
name: 'cart',
initialState: initialState,
reducers: {
addItemToCart(state, action) {
state.cartItems.push(action.payload);
},
}
我应该总是像以前那样返回状态吗
解决方案
请参阅变异和返回状态文档
Immer 期望你要么改变现有的状态,要么自己构造一个新的状态值并返回它,但不能同时在同一个函数中!例如,这两个都是使用 Immer 的有效 reducer:
const todosSlice = createSlice({
name: 'todos',
initialState: [],
reducers: {
todoAdded(state, action) {
// "Mutate" the existing state, no return value needed
state.push(action.payload)
},
todoDeleted(state, action.payload) {
// Construct a new result array immutably and return it
return state.filter(todo => todo.id !== action.payload)
}
}
})
推荐阅读
- node.js - 未在nodejs中接收UDP多播
- magento - Magento 2 & Temando:“已对此部分进行了信息更改,但尚未保存。此选项卡包含无效数据。”
- oracle - oracle - 根据顺序在一个表中收集多个表
- python - 阅读所有
进入数组python BS4
- django - 轮播滑块在 Django 列表中显示图像
- azure - Spark 处理如何处理来自集群外部的数据(如 azure blob 存储)?
- java - Java 业务规则应用于设置器以限制字符串长度并在超出限制时插入空间
- angular-material - 如何在 Mat 日期选择器中隐藏日历标题 (calendarHeaderComponent)
- java - Java解决骑士之旅需要很长时间
- powershell - 如何检查 OU 中的所有组是否已启用成员