Как мне обновить только одно значение моего редуктора в Redux?

#javascript #reactjs #redux

#javascript #reactjs #redux

Вопрос:

Ниже приведен мой код

 function customMsg(state, action) {
state = state || {
    person: {
        isFetching: false,
        didInvalidate: false, 
        name: "",
        height: "",
    }
};

switch(action.type) {

    case ACTION_TYPES.PERSON.FETCH_PERSOn_CONTENT_SUCCESS:
        return $.extend({}, state, {
            person.name: action.result.name
        });

    default: 
        return state;
}
}
  

Как мне обновить только одно значение моего редуктора в Redux?
Выше приведен пример, в котором я хочу обновить только имя объекта person.
Как я могу это сделать?

Ответ №1:

Используя jQuery extend, создайте клон и задайте имя пользователя:

 var newState = $.extend({}, state);
newState.person.name = action.result.name;
return newState;
  

В противном случае, для глубокого клонирования объекта вы можете использовать Lodash cloneDeep().

Другой способ — использовать ImmutableJS, чтобы установить состояние вашего приложения как неизменяемое. Это гораздо более надежное доказательство «изменчивости» ошибок и предлагает функции для установки глубоко вложенного значения в неизменяемое. Смотрите updateIn:

 return state.updateIn(['person', 'name'], () => action.result.name);
  

Попробуйте!