169 похожих чатов

Всем добрый вечер, у меня есть редакс стейт, изначальное состояние

пустой массив далее туда добавляются объекты. В кейсе ADD_ANOTHER я мутирую стейт, и функционал работает. Но как мне сделать то же самое но стейт не мутировать?

https://paste.ofcode.org/4YEh9LmCziYJhnSdbjUZ3

11 ответов

19 просмотров

сделат ькопию стейта сделать действия и добавить новый массив в стейт

Ivan- Автор вопроса
Taras
сделат ькопию стейта сделать действия и добавить...

Так не получиться, мне нужно тогда удалить из изначального стейта объект и только потом добавлять туда новый массив. А удалить я из стейта ничего не могу.

Ivan
Так не получиться, мне нужно тогда удалить из изна...

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

Ivan- Автор вопроса
Jakhongir
чтобы не мутировать стейт, придется полностью его ...

А как это правильно сделать то? Не получается.

Ivan
А как это правильно сделать то? Не получается.

не знаю как делают в редаксе, лучше в инете поискать

Наверное как-то так. // 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 } } Я тебе вчера скидывал доку - почитай её.

Ivan- Автор вопроса
jk
Наверное как-то так. // Initial state - пустой ма...

Ща буду пробовать, перерывчик. ADD_ANOTHER это кнопка плюс на карточке пиццы чтобы заказать несколько таких же пицц.

Ivan- Автор вопроса

Спасибо. Заработало.

Ivan- Автор вопроса
jk
Наверное как-то так. // Initial state - пустой ма...

Использовал иммер как Алексей подсказал. Теперь выглядит вот так: case 'ADD_ANOTHER': const index = state.findIndex((object) => object.title === action.payload.title) return produce(state, (draftState) => { draftState[index].amountOrdered++ });

Ivan
Использовал иммер как Алексей подсказал. Теперь вы...

пустой redux уже мало кто пользует (если начинают новый проект) redux toolkit удобнее

Ivan
Использовал иммер как Алексей подсказал. Теперь вы...

Ну я бы на твоём месте сначала без хелперов потренировался.

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта