首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在redux中向存储中添加多个对象

在redux中向存储中添加多个对象
EN

Stack Overflow用户
提问于 2017-02-26 09:14:27
回答 2查看 1.5K关注 0票数 2

我已经编写了一个API调用,它返回数组中的所有用户元素。

我已经写了一个reducer的一部分(它还不能完全工作,所以下面有问号),看起来像这样:

代码语言:javascript
复制
export default function(state = defaultState, action) {
    switch (action.type) {
        case 'receiveElement':
            return {
                ...state,
                elementsMap: {
                    ...state.elementsMap,
                    [action.element.id]: action.element,
                },
                visibleElements: [...state.visibleElements, action.element.id],
            };
        case 'receiveAllElements':
            return {
                ...state,
                elementsMap: {
                    ...state.elementsMap,
                    **???**
                },
                visibleElements: [...state.visibleElements, ...action.elements.map((element, index) =>
                    `id-${element.id}`
                )],
            };
        default:
            return state;
    }
}

defaultStateelementsMap如下所示:

代码语言:javascript
复制
const defaultState = {
    elementsMap: {
        'id-1': {id: 'id-1', shape: 'circle', title: 'Run for City Council'},
        'id-2': {id: 'id-2', shape: 'circle', title: 'NYU Law School'},
        'id-3': {id: 'id-3', shape: 'circle', title: 'Start Company'},
    },

    visibleElements: ['id-1', 'id-2', 'id-3'],
};

我正在努力添加从elementsMap的API调用返回的额外的N个元素,我想我已经得到了添加到visibleElements的部分的帮助。

感谢您的关注

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-26 09:28:55

试试这个:

代码语言:javascript
复制
case 'receiveAllElements':
    var map = elements.reduce((res, i) => { res[i.id] = i; return res; }, {});

    return {
        ...state,
        elementsMap: {
            ...state.elementsMap,
            ...map
        },
        visibleElements: [...state.visibleElements, ...action.elements.map((element, index) =>
            `id-${element.id}`
        )],
    };
票数 3
EN

Stack Overflow用户

发布于 2017-02-26 09:25:22

代码语言:javascript
复制
export default function(state = defaultState, action) {
    switch (action.type) {
        case 'receiveElement':
            return {
                ...state,
                elementsMap: {
                    ...state.elementsMap,
                    [action.element.id]: action.element,
                },
                visibleElements: [...state.visibleElements, action.element.id],
            };
        case 'receiveAllElements':
          let _visibleElements = [...state.visibleElements, ...action.elements.map((element, index) => `id-${element.id}`)]

            return {
                ...state,
                elementsMap: {
                    ...state.elementsMap,
                    **???**
                },
                visibleElements: _visibleElements,
            };
        default:
            return state;
    }
}

我也不会在输出对象上做任何逻辑,我会像上面展示的那样做。否则,代码看起来会很混乱。但这只是我的观点

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42463609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档