在 redux 中将对象推入数组?

时间:2021-07-09 12:28:14

标签: javascript reactjs react-native redux

我有一个包含一些列表对象的 reducer。

const list = [
  {
    name: 'A',
    products: { items: [] },
  },
  {
    name: 'B',
    products: { items: [{ qty: 1 }] },
  },
]

我想向产品密钥添加新项目。 减速器

export const addProductToSubscription = (state, { name, products }) => ({
  ...state,
  list: state.list.map((v) =>
    name === v.subscriptionName ? [...v.products, { ...v.products, items: products }] : v
  ),
})

这样发送,

dispatch("A",[{qty:2}])

预期输出

const list = [
  {
    name: 'A',
    products: { items: [{ qty: 2 }] },
  },
  {
    name: 'B',
    products: { items: [{ qty: 1 }] },
  },
]

什么 reducer 不更新状态。

谢谢!!

3 个答案:

答案 0 :(得分:1)

我重新创建了你的环境,结果就像-

const
const state = {
    list: [
        {
            name: "A",
            products: { items: [] },
        },
        {
            name: "B",
            products: { items: [{ qty: 1 }] },
        },
    ],
};

const updateState = (state, { name, products }) => {
    return {
        ...state,
        list: state.list.map(v => {
          return {
            ...v,
            products: {
              ...v.products,
              items: [
                ...v.products.items,
                ...products
              ]
            }
          }
        }),
    };
};

const res = updateState(state, { name: "A", products: [{ qty: 2 }, {qty: 4}] });

console.log(JSON.stringify(res));

答案 1 :(得分:1)

false 和扩展运算符 (import darkdetect darkdetect.theme() # Returns 'Dark' darkdetect.isDark() # Returns True darkdetect.isLight() # Returns False ) 更高级的解决方案 - immutability-helper

Object.assign

输出:

...

答案 2 :(得分:0)

使用扩展运算符获取新副本并更新到状态

export const addProductToSubscription = (state, { name, products }) => ({
  ...state,
  list: state.list.map((v) =>
    v.name === name
      ? {
          ...v,
          products: { items: [...v.products.items, ...products] },
        }
      : v
  ),
});