我可以 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 来自函数的完整状态对象。
我有以下初始状态,其中包含平面属性和一个深度嵌套 属性 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 来自函数的完整状态对象。