Можно ли переназначить все состояние в редукторе среза (с помощью Redux ToolKit)?

Я использую createSlice() от Redux Toolkit. И пытаюсь создать редуктор, который заполняет данные из внешнего источника в состояние редукции. Я пытаюсь обновить все состояние, передав объект в полезной нагрузке действия:

.
    reducers: {
        populateData: (state, action) => {
            state = action.payload
        }
.

но это будет работать, только если я создам редуктор для каждого ключа объекта. Есть ли способ сделать это сразу?


person Asaf Aaronson    schedule 08.03.2021    source источник
comment
Если я правильно понимаю, вы хотите обновить состояние целиком, а не только срез? Я не думаю, что вы можете сделать это с помощью редуктора фрагментов, поскольку он контролирует только выделенный ему фрагмент. Однако вы можете сделать это с помощью корневого редуктора.   -  person HMR    schedule 08.03.2021


Ответы (1)


Это распространенное заблуждение, и я на самом деле только что написал новую страницу с описанием редукторов с помощью Immer docs вчера что ответил на этот вопрос. Цитируя это:

Распространенная ошибка - попытаться присвоить state = someValue directly. Так не пойдет! Это только указывает переменную локального состояния на другую ссылку. Это не изменяет существующий объект / массив состояния в памяти и не возвращает совершенно новое значение, поэтому Immer не вносит никаких фактических изменений.

Вместо этого вы хотите: return action.payload, который полностью заменит существующее состояние.

person markerikson    schedule 08.03.2021