Как вы можете заменить все состояние в редуктор Redux Toolkit? - PullRequest
0 голосов
/ 31 января 2020

РЕДАКТИРОВАТЬ: решение состоит в том, чтобы вернуть state после полной его замены (return state = {...action.payload})! Но почему? Мне не нужно возвращать его, когда я заменяю поля по отдельности.

Я работаю с Redux Toolkit , который упрощает некоторые шаблоны Redux. Одна вещь, которую они делают, - это использование Immer, чтобы позволить вам напрямую «модифицировать» состояние (на самом деле это не так). Это прекрасно работает, за исключением того, что я не знаю, как полностью заменить мой раздел состояния. Например, я хочу сделать что-то вроде этого

const reducer = createReducer({ s: '', blip: [] }, {

    [postsBogus.type]: (state, action) => {
        state = { ...action.payload };
    }

, но state остается нетронутым. Вместо этого я должен сделать это

[postsBogus.type]: (state, action) => {
    state.s = action.payload.s;
    state.blip = action.payload.blip;
}

Есть ли способ полностью заменить состояние?

1 Ответ

2 голосов
/ 31 января 2020

Да, как вы заметили, вы должны вернуть новое значение, чтобы полностью заменить состояние.

Даже в «простом» редукторе Redux назначение state = newValue ничего не делает, потому что все, что он делает, это говорит, что переменная локальной функции с именем state теперь указывает на другое значение в памяти. Это ничего не значит для возврата нового значения.

В частности, для Immer, вы можете изменить содержимое прокси-значения state Пока это объект или массив, или вы можете вернуть совершенно новое значение, но не оба сразу .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...