我可以 return 只复制状态对象的一部分而不是整个状态对象吗

Can I return new copy of only part of a state object instead of the entire state object

我有以下初始状态,其中包含平面属性和一个深度嵌套 属性 searchStatus:

var searchStatus = Immutable.fromJS({
    requesting: {
        component: {tenants: false, platforms: false},
        tenant: false,
        hdf: false,
        cluster: false
    }
});

const initialState = {
    selectedItem: null,
    searchQuery: '',
    searchStatus: searchStatus
};

我有一个适用于这种状态的减速器:

function reducer(state = initialState, action) {
        switch (action.type) {
            case GET_TENANT_TEMPLATES_LISTING_REQUEST:
                var status = state.searchStatus.updateIn(['requesting', 'component', 'tenants'], function () {
                    return true;
                });
                return assign({}, state, {
                    searchStatus: status
                });

只为 searchStatus 部分状态 return 新副本然后将其合并到状态是否可以,还是我应该始终 return 整个状态副本?

更新:

case GET_TENANT_TEMPLATES_LISTING_REQUEST:
    var copy = assign({}, state);
    copy.searchStatus.requesting.component.tenants = true;
    return copy;

你必须每次都复制状态对象(注意可以保留内部引用,所以它并不像你想象的那么低效),这就是你对 assign 所做的(它我只能假设 shorthand for Object.assign())

您对 assign 的调用将从状态复制所有属性,然后从 { searchStatus: status } 复制到一个空对象,有效地复制您的整个状态,然后应用更改。

您不得改变传递给函数的状态,并且还必须 return 来自函数的完整状态对象。