我在Redux中的商店数据建模

时间:2017-06-01 00:33:17

标签: reactjs redux data-modeling

考虑一下:

我的应用程序最终会变得非常大。它是一个仪表板,可以让您访问各种实用程序,其中一个是todo应用程序。

如果我只想构建一个todo应用程序,那么我的状态对象将如此:

{ todos:[], completed:false, todoInput:''};

todoInput将绑定到表单字段,点击添加后,它会更改todos数组并切换completed字段。所以我的combineReducers()函数看起来像这样。

combineReducers({todos,completed,todoInput});

这是有道理的,因为所有状态都与todo应用程序相关,因为只有一个todo应用程序。

现在因为我正在构建一个更复杂的应用程序,它也有一个todo应用程序,这就是我的状态可能会是这样的:

{
    otherState:'',evenMoreState:[]',evenMore:{},

    todo:{ todos:[], completed:false, todoInput:''}
}

正如您所看到的,我现在将待办事项分离为一个单独的对象,因此它被封装且更有条理。所以我有两个问题。

1)这是个好主意吗?这似乎是合乎逻辑的举动,因为我的应用程序的大小会增长,我不希望所有的状态都作为主状态对象的属性浮动。我是否正确地解决了这个问题?

2)我的组合减速器(据我所知)不能采用嵌套对象。所以它现在看起来像这样。

combineReducers({ otherState,evenMoreState,evenMore,todo})

所以现在我的减速器组合必须在处理todo状态的reducer里面完成。是否有更好/不同的方法来做到这一点?

由于

1 个答案:

答案 0 :(得分:2)

是的,你绝对是在正确的轨道上。同样值得注意的是,您可以多次使用combineReducers,例如:

const rootReducer = combineReducers({
    otherState : otherStateReducer,
    todos : combineReducers({
        todos : todosReducer,
        completed : todosCompletedReducer,
        todoInput : todoInputReducer
    })

如果需要,可以单独定义整个todos部分,并在顶级combineReducers调用中导入和引用。     });

您可能需要阅读Redux docs section on "Structuring Reducers"以了解有关组织减速器逻辑的方法的更多信息,以及Redux FAQ on organizing nested state。此外,我Redux TechniquesRedux ArchitectureReact/Redux links list部分提供了有关构建真实Redux应用程序的各种文章的链接。