You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-Redux购物车数量增减报错:state.items.find不是函数

React-Redux购物车数量增减错误修复

问题根源很明确:你的state.items是对象类型(初始值设为{}),但你在incrementQuantity和decrementQuantity里调用了数组的find()方法——对象没有这个方法,所以才会抛出state.items.find不是函数的错误。

你在addToCart里已经用「商品id作为键」的对象结构存储购物车商品,所以增减数量时直接通过id访问对应商品即可,修改后的代码如下:

import { createSlice } from '@reduxjs/toolkit';

const initialState = {
  items: {},
};

const cartSlice = createSlice({
  name: 'cart',
  initialState,
  reducers: {
    addToCart: (state, action) => {
      const { id } = action.payload;
      if (state.items[id]) {
        state.items[id].quantity += 1;
      } else {
        state.items[id] = { ...action.payload, quantity: 1 };
      }
      console.log(state.items[id].quantity)
    },
    removeFromCart: (state, action) => {
      delete state.items[action.payload.id];
    },
    incrementQuantity: (state, action) => {
      // 直接通过id访问对象中的商品
      const item = state.items[action.payload];
      if (item) { // 增加判断避免无效id导致报错
        item.quantity++;
      }
    },
    decrementQuantity: (state, action) => {
      const item = state.items[action.payload];
      if (item) {
        // 数量大于1时才减少,否则保持1
        if (item.quantity > 1) {
          item.quantity--;
        }
        // 可选逻辑:如果想在数量为1时移除商品,替换成下面一行
        // item.quantity === 1 ? delete state.items[action.payload] : item.quantity--;
      }
    },
  },
});

export const { addToCart, removeFromCart, incrementQuantity, decrementQuantity } = cartSlice.actions;
export const cartReducer = cartSlice.reducer;

额外优化说明:

  • 增加了商品存在性判断,避免传入无效id时出现报错
  • 提供了「数量为1时移除商品」的可选逻辑,可根据需求自行切换

内容的提问来源于stack exchange,提问作者MirunaB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:24:53