在redux中更新之前检查数组中的对象



有人知道如何检查对象是否在数组内,如果是,更新它吗?

我尝试了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++;
},
},
});

最新更新