首页 > 解决方案 > 转换对象以使用扩展运算符?

问题描述

我在redux reducers中有一个案例,我使用object.assign来复制我的状态,我想将它转换为新的语法传播运算符“......状态”,我该怎么做,

不做突变!

case INCREASE_QUANTITY: {
      return Object.assign({}, state, {
        cart: state.cart.map(item => {
          if (item.product.id === action.productInfo.product.id) {
            return Object.assign({}, item, {
              quantity: action.quantity + 1,
            });
          }
          return item;
        }),
      });
    }

标签: javascripthtmlreactjsobjectredux

解决方案


您打开一个对象文字,首先...state将其展开到新对象中,然后使用cart属性(以及内部属性的相同概念):

case INCREASE_QUANTITY: {
  return {
    ...state,
    cart: state.cart.map(item => {
      if (item.product.id === action.productInfo.product.id) {
        return {
          ...item,
          quantity: action.quantity + 1,
        };
      }
      return item;
    }),
  };
}

通过按该顺序执行此操作,您可以确保cart(或quantity内部的)覆盖传播中的属性。对象文字中后来的属性“胜过”早期的属性。


推荐阅读