@lexstile

Как правильно организовать работу корзины через @reduxjs/toolkit?

Реализацию выбрал объектную вместо массивной, так как проще искать элементы.
Такое ощущение, что я навертел тут, так ли это и корректно ли я использую возможности нового подхода?
Укажите, пожалуйста, на недочеты. Сам код работает.

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

const initialState = {
  positions: {},
  total: 0,
};

export const cartSlice = createSlice({
  name: 'cart',
  initialState,
  reducers: {
    addPosition: (state, action) => {
      const positions = { ...state.positions };
      const position = action.payload;

      state.positions = positions[position.id]
        ? {
            ...positions,
            [position.id]: { ...positions[position.id], quantity: positions[position.id].quantity + 1 },
          }
        : { ...positions, [position.id]: { ...position, quantity: 1 } };
    },
    removePosition: (state, action) => {
      const positions = { ...state.positions };
      const position = action.payload;

      if (positions[position.id]) {
        if (positions[position.id].quantity > 1) {
          state.positions = {
            ...positions,
            [position.id]: { ...positions[position.id], quantity: positions[position.id].quantity - 1 },
          };

          return;
        }

        delete positions[position.id];

        state.positions = positions;
      }
    },
    setTotal: (state, action) => {
      state.total = action.payload;
    },
  },
});
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы