这是我的状态:
export default {
app: {
loading: false,
loadError: null
},
search: {
type: null,
text: ''
},
things: {
byId: {
},
allIds: []
}
}
当我从服务器获取新的things
时,我想按照Redux文档的建议更新things.byId
和things.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...
我感觉有一种更干净/更有效的方法。