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

使用React+Redux Toolkit如何更新商品的计数器与对应价格?

解决方案

1. 调整addCounter reducer 逻辑

你需要在reducer中先通过唯一标识找到目标商品,再更新其counter属性,Redux Toolkit内置Immer支持直接修改状态:

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

export const displayItemsSlice = createSlice({
  name: 'displayItems',
  initialState: {
    itemList: [],
  },
  reducers: {
    addItem: (state, action) => {
      // 可选优化:新增唯一id避免同名商品冲突,不需要可以保留原逻辑
      state.itemList.push({
        id: Date.now().toString(),
        name: action.payload,
        counter: 1,
        price: 1
      });
    },
    addCounter: (state, action) => {
      // payload传入目标商品的唯一标识,这里示例用id,用name的话改为匹配item.name即可
      const target = state.itemList.find(item => item.id === action.payload.itemId)
      if (target) {
        target.counter += 1
        // 如需同步更新price,直接在此处计算即可:target.price = target.counter * 单价
      }
    },
    addPrice: (state, action) => {
      return
    },
  },
})

export const { addItem, addCounter, addPrice} = displayItemsSlice.actions
export default displayItemsSlice.reducer

2. 组件中派发addCounter事件

在商品项的加计数器触发逻辑中,传入对应商品的唯一标识即可:

// 示例:商品列表循环渲染时的加按钮点击事件
const handleAddCount = (item) => {
  dispatch(addCounter({ itemId: item.id }))
  // 用name作为标识的话改为 dispatch(addCounter({ itemName: item.name }))
}

注意事项

  • 如果你的业务中存在同名商品,必须给每个商品加唯一id作为匹配标识,避免更新错商品
  • Redux Toolkit 允许直接修改状态属性,不需要手动返回新的状态对象,只要找到目标项直接修改counter即可生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:15:03