Выбор ответа Junior Context и стейт-менеджеры обновлено
Почему в createSlice можно «мутировать»
Вопрос
В редьюсере createSlice написано state.items.push(action.payload). Почему это не ломает иммутабельность Redux?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: RTK оборачивает редьюсер в Immer: мутации идут над черновиком. createSlice использует Immer.
Варианты ответа
- Redux Toolkit отключает проверку иммутабельности в редьюсерах
createSlice - В Redux Toolkit стор хранится в мутабельном объекте, это нормально
pushв редьюсерах RTK заменяется наconcatпри сборке- RTK оборачивает редьюсер в Immer: мутации идут над черновикомправильный ответ
Разбор
createSlice использует Immer. Редьюсер получает черновик (draft), записи в него отслеживаются, и Immer собирает новый объект, переиспользуя неизменённые части. Для Redux состояние по-прежнему иммутабельно.
- Проверка мутаций в dev-режиме RTK как раз включена.
- Стор остаётся неизменяемым, просто удобный синтаксис.
- Никакой подмены кода при сборке нет, это работа Immer в рантайме.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.