在处理帖子和评论的应用程序中,我想将我的状态保持在一个统一的标准化结构中,以使其尽可能灵活。具体来说,我想将所有帖子和评论都作为键值对,其中键是帖子或评论的ID,值是帖子或评论。即,我的状态如下所示:

state = {
    posts: new Map(),
    comments: new Map()
},


这种状态结构简化了大多数减速器的情况。但是,在组件中,我反复需要执行以下操作才能获得一系列帖子或评论:

Array.from(this.props.posts.values())


其中this.props.posts是映射到特定组件的道具的redux状态的帖子。

有没有一种方法可以将最后一个代码段添加到状态中,就像关系数据库中的视图一样?我试过了

state = {
    posts: new Map(),
    comments: new Map(),
    postArray: () => { return Array.from(posts.values()) }
},


但这似乎不起作用。

最佳答案

请参阅Redux文档的Structuring Reducers部分,尤其是Normalizing State Shape部分。

我们建议典型的规范化状态部分应如下所示:

users : {
    byId : {},
    allIds : []
}


您还应该使用memoized "selector" functions封装从存储状态派生数据的过程。

另外,我个人非常喜欢使用Redux-ORM library作为抽象层来管理Redux存储中的规范化数据。我的"Practical Redux" tutorial series演示了如何使用它。

在我的Redux Reducers and SelectorsReact/Redux links list部分中,有指向减速器,选择器和规范化的其他文章的链接。

10-05 20:54
查看更多