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

jljoyd4f  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(147)

有谁知道如何检查对象是否在数组中,如果是,更新它吗?
我尝试了find方法,但是当我这样做的时候,它说它找不到我所引用的对象;我也尝试了include,但是由于某种原因,它也认为该项不在数组中。
这是我最好的了

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;

但每次只会添加一个新对象

gkl3eglg

gkl3eglg1#

quantity似乎没有更新,因为state.map没有将更新的quantity变回代理state以进行更新。
假设目标是检查状态数组中具有相同name的项,如果项存在,则向其quantity添加1,如果不存在,则向数组添加来自action.payload的新对象,考虑使用find作为条件(使用Redux Toolkit中的Immer update):

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++;
    },
  },
});

相关问题