Redux 多对多关系

jos*_*unt 5 redux

我试图找出一个好的结构来在 Redux 中创建多对多的关系。对于这个例子,我们有图像(可以有多个标签)和标签(可以有多个图像)。

这是在 Redux 中构建它的好方法吗?

images: {
    1: {
        title: "A bunch of hills"
    },
    2: {
        title: "Hiking in a forest"
    }
},
tags: {
    1: {
        title: "landscape"
    },
    2: {
        title: "outdoors"
    }
},
imagesTags: {
    [
        image: 1,
        tag: 1
    ],
    [
        image: 1,
        tag: 2
    ],
    [
        image: 2,
        tag: 2
    ]
}
Run Code Online (Sandbox Code Playgroud)

这确实意味着我必须创建一个单独的减速器,它会扰乱我的模块化结构,但我想这始终是拥有相关减速器的结果。

mar*_*son 5

是的,这是“标准化”状态的一个例子。Redux 文档在Structuring Reducers部分介绍了规范化。请参阅结构化减速器 - 先决条件概念结构化减速器 - 标准化状态形状结构化减速器 - 更新标准化数据。此外,Redux 常见问题解答在“如何在我的状态中组织嵌套或重复数据?”中讨论了规范化。.

除此之外,我非常喜欢使用名为 Redux-ORM 的库来管理 Redux 存储中的关系数据。我写了几篇讨论我如何使用它的帖子:Practical Redux Part 1: Redux-ORM BasicsPractical Redux Part 2: Redux-ORM Concepts and Techniques。我的“Practical Redux”教程系列的其余部分也展示了这个库的实际应用。

  • 当我编写“规范化状态形状”文档页面时,我根据 Redux-ORM 构建事物的方式构建了状态形状示例。Redux-ORM 为多面关系定义了那些“直通表”,并且由于每个条目在技术上都是模型实例的值,因此它需要自己的 ID。至于 ID 数组,虽然 JS 引擎现在有一个相当标准化的过程来迭代对象中的键,但你不应该依赖它来定义排序。存储 ID 数组允许您定义项目的顺序。Redux-ORM 将其用于“所有类型的项目”查找。 (5认同)