我是否可以仅返回状态对象的一部分而不是整个状态对象的新副本

时间:2015-12-29 07:57:25

标签: javascript redux redux-framework

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

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

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

我有一个适用于此状态的reducer:

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部分返回新副本,然后将其合并到状态中,还是应该始终返回整个状态副本?

更新

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

1 个答案:

答案 0 :(得分:2)

您必须每次复制状态对象(请注意,可以保留内部引用,因此它不会像您想象的那样低效),这就是您对{{1 (我只能假设它是assign

的简写

您对assign的调用将复制州的所有属性,然后从Object.assign()复制到空对象,有效复制整个州,然后应用更改。

你不能改变传递给函数的状态,你还必须从函数中返回一个完整的状态对象。