redux 中 normalizr 后的非规范化实体

Posted

技术标签:

【中文标题】redux 中 normalizr 后的非规范化实体【英文标题】:Denormalized entities after normalizr in redux 【发布时间】:2016-09-13 16:46:36 【问题描述】:

我看到很多关于在 redux 中规范化你的商店的信息。但是,当您想要显示图表中的数据时,您会怎么做?

我的数据是这样的

 courses: [ chapters: [ assignments: [ ...blah ] ] ] 

每个实体都有数据。

我想在页面上显示该数据,但我的所有数据都是规范化的。此外,我想为所有三个实体创建一个容器组件。

无论有没有规范化,这在 redux 中似乎都很难做到。必须有推荐的处理方法。

【问题讨论】:

【参考方案1】:

您可以制作接受所需数据 ID 的容器。容器“连接”组件与商店。然后组件创建容器用于将子级与商店等连接起来......

要通过 id 从存储中获取数据,您可以检查: javascript Redux - how to get an element from store by id

为了减少样板文件,您可以像使用三视图示例一样将组件连接到同一模块中:

https://github.com/reactjs/redux/tree/master/examples/tree-view

显然,您的组件将不再那么愚蠢(叶子组件除外)。

也检查这个例子: At what nesting level should components read entities from Stores in Flux?

【讨论】:

【参考方案2】:

我解决这个问题的方法是通过非规范化函数从 Redux 状态运行我想要的对象。我在 mapStateToProps 函数中执行此操作,然后将其传递给 connect

如果您在容器级别执行此操作,那么您可以选择完全非规范化对象的哪些部分,然后通过它们的 props 发送到其他组件(因此,如果不使用 connect,再次非规范化并没有真正的好处)。

对于 denormalizer 函数,您可以使用 denormalizr 库。但是如果你看source code 实际函数并不算太大,它可能可以根据你的需要进行修改并直接挂钩到 Redux 状态,例如。

【讨论】:

以上是关于redux 中 normalizr 后的非规范化实体的主要内容,如果未能解决你的问题,请参考以下文章

Redux - immer 与 normalizr

带有嵌套对象数组的 Redux 的 Normalizr

Redux normalizr + 处理减少的响应

在 React UI 中使用规范化的 Redux 状态之前,是不是应该对其进行非规范化?

如何添加/删除使用 normalizr 生成的 redux 存储?

如何以最平坦的方式为Redux规范化对象数组?