Является ли добавление условий к редуктору анти-паттерном? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть товары в корзине, и я хочу проверить, добавил ли пользователь тот же товар того же цвета и размера.

Если это так, я просто хочу увеличить количество, а не просто добавитьэто, но это создает своего рода неуклюжий редуктор, и я хотел знать, считается ли это анти-паттерном и если да, то что мы можем сделать, чтобы упростить его

export default (state = initialState, action) => {
  switch (action.type) {
    case 'ADD_TO_CART':
      // Check to see if we already have the same product
      // with the same color and size in our cart
      const productIndex = state.products
        .findIndex(product => product._id === action.product._id
          && product.size === action.product.size
          && product.color === action.product.color);

      // if we have it already increase the quantity  
      if (productIndex !== -1) {
        const updatedProduct = {
          ...state.products[productIndex],
          quantity: state.products[productIndex].quantity + action.product.quantity,
        };

        return {
          ...state,
          products: [
            ...state.products.slice(0, productIndex),
            updatedProduct,
            ...state.products.slice(productIndex + 1),
          ],
        };
      }

      // if not just save it
      return {
        ...state,
        products: [...state.products, action.product],
      };
    default:
      return state;
  }
};

1 Ответ

0 голосов
/ 18 октября 2018

Нет, это абсолютно не анти-паттерн. Редукторы могут и должны делать намного больше, чем просто return {...state, ...action.payload}.Теперь, какую логику вы поместите в редуктор, зависит от вас, а также какие абстракции вы выбираете для использования в процессе.

Если вы хотите написать вложенную логику неизменяемого обновления Тогда я бы посоветовал взглянуть на immer библиотеку неизменяемых обновлений .Я бы также предложил попробовать наш новый пакет redux-starter-kit , который использует immer для внутреннего использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...