减速器:面向动作的减速器还是面向结构的减速器?

时间:2018-12-31 18:21:25

标签: redux react-redux

将减速器与他们处理的动作或他们要更新的商店部分相匹配是否更合理?

我阅读过的大多数文档都倾向于围绕商店的结构来定位,但是有一些担忧使我不以为然。

对于背景,我正在构建的应用程序并不简单,并且由SQL数据库(与NoSQL相对)支持,这对我们如何合理地构造来自后端的数据有影响。它必须处理六种不同的非平凡用例,例如轮询,事件保留和管理,彩票等等。

在阅读有关将减速器与商店结构对齐之前,我所设想的商店结构是:

{
    "usersByID": {
        "aef1345ecb986": {
            "eventIDs": [
                "1256",
                "1876",
                "0010"
            ]
        }
        // obviously lots more users
    },
    "eventsByID": {
        "1256": {//stuff},
        "1876": {//stuff},
        "0010": {//stuff}
        // lots more events too
    }
}

但是,使用与商店对齐的reducer,这意味着root reducer功能将类似于:

function rootReducer(state, action) {
    return ({
        usersByID: usersReducer(state.usersByID, action),
        eventsByID: eventsReducer(state.eventsByID, action)
    });
}

虽然使用与动作对齐的减速器,并按存储在action.class中的常规类别将它们隔离,但是看起来像这样:

function rootReducer(state, action) {
    switch (action.class) {
        case POLLING:
            return pollingReducer(state, action)
        case EVENTs:
            return eventsReducer(state, action)
        default:
            return defaultReducer(state, action)
    }
}

诚然,这确实意味着每个减速器都必须能够立即作用于完整状态,但是避免的是,复杂动作可能导致状态转换网变得复杂。在联邦模型中,每个动作都有一个化简器,该化简器包含所有逻辑,以整齐有序的方式对商店进行原子更新。

请告知我是不是在正确地考虑这一切,还是在构造Redux减速器的看似主流的方式上缺少某些东西?

0 个答案:

没有答案