【问题标题】:Redux data structuringRedux 数据结构
【发布时间】:2015-11-10 07:02:26
【问题描述】:

我正在尝试使用Redux 构建一个复杂的全动态应用程序。我的意思是我的应用程序有很多动态生成的表单,其中包含动态生成的字段组件。我也想在我的 Redux-store 中存储关于我的组件的可视化数据。但是如果不将真实数据与可视化组件数据混合,我该怎么做呢?

例如,如果我有这样的结构

Store { 
  visual: {...deeply nested visual-data-tree...}, 
  data: {...deeply-nested real-data-tree...} 
}

渲染组件很困难,因为我需要先搜索视觉数据,然后在两棵树中反应组件“值”。

但如果有类似这样的结构:

Store {
  form {
    visual: {...form visual data...},
    data: {
      //Ok here the form "data" - widgets. Or it must to be visual? :)
      widget1 {
        visual: {type:"ComboBox", opened: true},
        data: 1
      }
    }
  }
}

你看到了问题,现在我在表单小部件的真实数据中有可视数据。

(表单 - 数据 - 小部件1 - 视觉

真实数据中的可视化数据超出了这个概念。

你们如何解决混合数据的相同问题?

真的很抱歉我的英语不好。我希望我清楚地解释了这个问题。

【问题讨论】:

  • Redux 社区目前正在讨论这个问题——你可以在这里github.com/rackt/redux/issues/159 跟踪它的进展/讨论。
  • 感谢您的回复,所以我会跟踪它

标签: javascript architecture hierarchical-data flux redux


【解决方案1】:

区别不是很肤浅吗?我认为一个更重要的规则是状态中的数据应该被规范化。例如,如果您有 Combobox 小部件让您选择用户,那么您的数据形状最好是

{
  chosenUserId: 10, // Good!
  users: {
    10: { name: 'Alice' }
}

而不是

{
  chosenUser: { name: 'Alice' }, // Bad!
  users: {
    10: { name: 'Alice' }
}

如果数据在状态树中重复,则很难正确更新并避免不一致。

只要保持数据标准化,我认为没有必要划分visualdata。您可能希望拥有看起来像数据库的顶级实体缓存(例如,entities,其中包括 usersposts 或您的应用程序使用的任何数据对象),但除此之外,使用任何感觉的状态形状检索相关状态时最舒服。

【讨论】:

  • 在将数据实际渲染到 DOM 时,是否有一种简单的方法可以从规范化数据返回到嵌套结构?
  • 我只会手动编写“selectors” 并从组件的mapStateToProps 中使用它们。
  • 是的,这基本上就是我现在正在做的事情。我想知道这是否可以以某种方式自动化。例如,通过实现类似 normalizr.denormalize() 的东西,它将用实际对象替换实体 ID(仅在传递给视图进行渲染之前使用)。
  • @PetrPeller 试试谷歌搜索吧,我想有几个人会尝试这样做,甚至有人的 fork 实现了类似的东西
猜你喜欢
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多