Как вернуть новое состояние в редуксе с подчеркиванием? - PullRequest
0 голосов
/ 28 февраля 2019

Когда я работаю с редуктором с подчеркиванием, не позволяю использовать Object.assign, так как приходится поддерживать браузеры.Я пишу редуктор следующим образом:

const actionHandlers = {
    [actionTypes.SELECT_OPTION](state, payload) {
        _.each(state.options, option => option.selected = option.value === payload.value);
        return state;
    }
};

Тогда я понимаю, что должно возвращать новое состояние, не должно использовать каждое, поскольку у каждого из них есть побочные эффекты, которые будут мутировать исходное.

Затем я заменяю каждый на карту:

const actionHandlers = {
    [actionTypes.SELECT_OPTION](state, payload) {
        return [
            ...state,
            { options: _.map(state.options, option => option.selected = payload.value === option.value)}
        ];
    }
};

Кажется, что я назначаю только что созданный объект и возвращаю новое состояние без изменения исходного, но когда я регистрирую их, исходноесостояние также было видоизменено.

Любой совет был бы оценен!

1 Ответ

0 голосов
/ 28 февраля 2019

state выглядит так, как будто это должен быть объект с массивом options?

Вот немутантная версия:

const actionHandlers = {
    [actionTypes.SELECT_OPTION](state, payload) {
        return {
            ...state,
            options: state.options.map(option => ({ ...option, selected = payload.value === option.value })
        };
    }
};

Чтобы он не мутировалнам нужно также распространять (копировать) каждый option.В противном случае он будет ссылаться на существующий option.

...