2

我有以下初始状态,它由平面属性和一个深层嵌套属性组成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部分状态的新副本,然后将其合并到状态中,还是应该始终返回整个状态副本?

更新

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

1 回答 1

2

您必须每次都复制状态对象(请注意,可以保留内部引用,因此它并不像您想象的那么低效),这就是您正在做的事情assign(我只能假设它是 的简写Object.assign()

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

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

于 2015-12-29T08:06:52.130 回答