如何仅在Redux中更新我的reducer的一个值?

Dre*_*ams 2 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;
}
}
Run Code Online (Sandbox Code Playgroud)

如何仅在Redux中更新我的reducer的一个值?以上是我只想更新person对象名称的示例.我怎样才能做到这一点?

Dam*_*oux 5

使用jQuery扩展,创建一个克隆并设置人名:

var newState = $.extend({}, state);
newState.person.name = action.result.name;
return newState;
Run Code Online (Sandbox Code Playgroud)

否则,要深入克隆对象,可以使用lodash cloneDeep().

另一种方法是使用immutableJS将您的应用程序状态设置为不可变.它是更多的bug"可变"证明,并提供了在不可变的情况下设置深层嵌套值的函数.请参阅updateIn:

return state.updateIn(['person', 'name'], () => action.result.name);
Run Code Online (Sandbox Code Playgroud)

试试吧!