Конвертировать объект для использования оператора распространения? - PullRequest
2 голосов
/ 13 октября 2019

У меня есть регистр редукторных редукторов, и я использовал object.assign, чтобы взять копию моего состояния, и я хочу преобразовать его в новый оператор расширения синтаксиса "... state", как я могу это сделать,

Без мутаций!

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

Ответы [ 2 ]

3 голосов
/ 13 октября 2019

Вы открываете литерал объекта, начинаете с ...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 для внутреннего) переопределит свойство из спреда. Более поздние свойства в объектных литералах "побеждают" над более ранними.

1 голос
/ 13 октября 2019

Object.assign({}, item, { quantity: action.quantity + 1 });
становится
{ ...item, quantity: action.quantity + 1 }

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;
        })
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...