有人知道如何检查对象是否在数组内,如果是,更新它吗?
我尝试了find方法,但是当我这样做时,它说它找不到我引用的对象。我也试过包含,但由于某种原因,它也不认为项目是在数组。
这是我得到的最好的:
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
interface Displate {
name: string;
finish: string;
size: string;
frame: string;
price: number;
quantity: number;
}
interface DisplateArray extends Array<Displate> {}
const initialState: DisplateArray = [];
export const cartSlice = createSlice({
name: "cart",
initialState,
reducers: {
addDisplate: (state, action: PayloadAction<Displate>) => {
state.map((displate) => {
if (displate.name === action.payload.name) {
return displate.quantity++;
} else {
return state.push(action.payload);
}
});
},
},
});
export const { addDisplate } = cartSlice.actions;
export default cartSlice.reducer;
但这只是每次都添加一个新对象
似乎quantity
没有更新,因为state.map
没有将更新的quantity
突变回代理state
进行更新。
假设目标是检查状态数组中具有相同name
的item,如果item存在,则向其quantity
添加1,如果不从action.payload
添加新对象到数组,则考虑使用find
作为条件(使用来自Redux Toolkit的Immer更新):
export const cartSlice = createSlice({
name: "cart",
initialState,
reducers: {
addDisplate: (state, action: PayloadAction<Displate>) => {
const existingItem = state.find(
(item) => item.name === action.payload.name
);
if (!existingItem) {
state.push({ ...action.payload, quantity: 1 });
return;
}
existingItem.quantity++;
},
},
});