在哪里存放" loading"和" loadError"对象?

时间:2017-02-21 17:54:13

标签: javascript reactjs redux

我的状态看起来像这样:

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

        },
        allIds: []
    },
}

根据Redux文档的建议,我会存储我的模型byIdallIds以获取订单。但是,当我从服务器获取thing时,我希望能够设置loadingloadError,以便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调用中发送LOADINGLOAD_ERROR个操作,然后在各个reducer使用的LOAD_THINGS_SUCCESS中发送。但是,为了将app.loading设置为true,每个单独的reducer都需要以某种方式访问​​app切片。实现此目的的一种方法是发送由loadSuccess()消耗的reducers/app.js,然后loadThingsSuccess()消耗reducers/thing.js消耗的state.things。然而,这似乎是hacky而不是DRY。我应该保持&#34; loading&#34;每个state.otherThingsLOADING_THINGS的状态,并执行LOADING_THINGS_ERRORstate.app等操作,或者是否应保存在'dict' object is not callable中 - 如果是,我应该如何修改它们?< / p>

谢谢!

0 个答案:

没有答案