我的状态看起来像这样:
export default {
app: {
selectedThing: {},
loading: false,
loadError: null
},
search: {
type: null,
text: ''
},
things: {
byId: {
},
allIds: []
},
}
根据Redux文档的建议,我会存储我的模型byId
和allIds
以获取订单。但是,当我从服务器获取thing
时,我希望能够设置loading
和loadError
,以便UI可以显示某种消息。我正在使用combineReducers
import { combineReducers } from 'redux'
import things from './things'
import search from './search'
const rootReducer = combineReducers({
things,
search
})
export default rootReducer
...只更新状态的一部分。
// ./things.js
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:
console.log(action.things)
return {
...state,
byId: action.things.forEach(thing => {
state[thing.id] = thing
}),
allIds: action.things.map(thing => {
return thing.id
})
}
default:
return state
}
}
我在API调用中发送LOADING
和LOAD_ERROR
个操作,然后在各个reducer使用的LOAD_THINGS_SUCCESS
中发送。但是,为了将app.loading
设置为true
,每个单独的reducer都需要以某种方式访问app
切片。实现此目的的一种方法是发送由loadSuccess()
消耗的reducers/app.js
,然后loadThingsSuccess()
消耗reducers/thing.js
消耗的state.things
。然而,这似乎是hacky而不是DRY。我应该保持" loading"每个state.otherThings
和LOADING_THINGS
的状态,并执行LOADING_THINGS_ERROR
和state.app
等操作,或者是否应保存在'dict' object is not callable
中 - 如果是,我应该如何修改它们?< / p>
谢谢!