在reducer中更新byId和allIds的正确方法

时间:2017-02-21 18:27:46

标签: javascript reactjs redux

这是我的状态:

export default {
    app: {
        loading: false,
        loadError: null
    },
    search: {
        type: null,
        text: ''
    },
    things: {
        byId: {

        },
        allIds: []
    }
}

当我从服务器获取新的things时,我想按照Redux文档的建议更新things.byIdthings.allIds。我是按照以下方式进行的,但我觉得有更好的方法:

import { LOAD_THINGS_SUCCESS } from '../actions/actionTypes'
import initialState from './initialState'

export default function things(state = initialState.things, action) {
    switch(action.type) {
        case LOAD_THINGS_SUCCESS:
            const thingsById = {}
            action.things.forEach(thing => {
                thingsById[thing.id] = thing
            })
            return {
                ...state,
                byId: thingsById,
                allIds: action.things.map(thing => thing.id)
            }
        default:
            return state
    }
}

我正在使用combineReducers,而上述reducers/things.js就是其中之一。我关注的部分是action.things.forEach...我感觉有一种更干净/更有效的方法。

0 个答案:

没有答案