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

标签 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;

最佳答案

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

的简写

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

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

关于javascript - 我可以仅返回状态对象的一部分而不是整个状态对象的新副本吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34506892/

相关文章:

php - Wordpress Redux 框架媒体查询

reactjs - 在 React Redux 应用程序中使用 OAuth2 刷新 token

jquery - Redux 框架 - 使用逗号进行多选

javascript - 谷歌地图最佳实践?

javascript - 如何在 JavaScript 中通过正则表达式分割字符串?

javascript - 如何在常规 Chrome 扩展中调用 chrome.devtools.* api 调用,而无需在浏览器中打开 devtools

reactjs - 在react-redux中@connect装饰器有什么用

javascript - 使用 Normalizr 后排序

javascript - 如何通过 s3 中的 url 压缩图像

javascript - 在更改事件上绑定(bind)文本输入值 - React Native + Redux