пустой массив далее туда добавляются объекты. В кейсе ADD_ANOTHER я мутирую стейт, и функционал работает. Но как мне сделать то же самое но стейт не мутировать?
https://paste.ofcode.org/4YEh9LmCziYJhnSdbjUZ3
сделат ькопию стейта сделать действия и добавить новый массив в стейт
Так не получиться, мне нужно тогда удалить из изначального стейта объект и только потом добавлять туда новый массив. А удалить я из стейта ничего не могу.
чтобы не мутировать стейт, придется полностью его заменять новым
А как это правильно сделать то? Не получается.
не знаю как делают в редаксе, лучше в инете поискать
Наверное как-то так. // Initial state - пустой массив const CartReducer = (state = [], action) => { switch (action.type) { case 'ADD_TO_CART': // Новый массив, старые значения + одно новое return state.concat(action.payload) case 'ADD_ANOTHER': // Новый стейт, старые значения минус одно, одно новое // Чтобы это работало в стейте уже должна быть такая pizza // Зачем нужен ADD_ANOTHER и как ты это контролируешь не спрашиваю return state.map(pizza => { if (pizza.title === action.payload.title) { return { ...pizza, amountOrdered: pizza.amountOrdered + action.payload.amountOrdered } } return pizza }) case 'REMOVE_FROM_CART': // Новый стейт, старые значения минус одно return state.filter((pizza) => pizza.title === action.payload[0].title) default : return state } } Я тебе вчера скидывал доку - почитай её.
Ща буду пробовать, перерывчик. ADD_ANOTHER это кнопка плюс на карточке пиццы чтобы заказать несколько таких же пицц.
Спасибо. Заработало.
Использовал иммер как Алексей подсказал. Теперь выглядит вот так: case 'ADD_ANOTHER': const index = state.findIndex((object) => object.title === action.payload.title) return produce(state, (draftState) => { draftState[index].amountOrdered++ });
пустой redux уже мало кто пользует (если начинают новый проект) redux toolkit удобнее
Ну я бы на твоём месте сначала без хелперов потренировался.
Обсуждают сегодня