数据应该在redux状态树中吗?

dag*_*oin 8 javascript flux ecmascript-6 reactjs redux

我对Redux状态树中的内容感到有些失落.

我看到了关于在状态树中存储什么的两个相互矛盾的陈述.

  • React doc告诉我们,只有用户输入应该存储在状态树中.

原始列表的产品传递中作为道具,所以这不是状态.搜索文本和复选框似乎是状态,因为它们随时间变化并且无法从任何事物计算.最后,过滤的产品列表不是状态,因为它可以通过将原始产品列表与搜索文本和复选框的值组合来计算.

  • Redux doc告诉我们,我们经常应该在单个状态树中存储UI状态和数据:

对于我们的待办事项应用,我们希望存储两种不同的东西:

  • 当前选择的可见性过滤器;
  • todos的实际列表.

您经常会发现需要在状态树中存储一些数据以及一些UI状态**.这很好,但尝试将数据与UI状态分开.

所以React告诉我们不应该存储数据(我说的是todos的数据),对我来说,Redux告诉相反的事情.

根据我的理解,我倾向于React方面,因为React和Redux都旨在通过存储来预测UI状态:

  1. 所有无法计算的内容(例如:所有人类输入)并且是UI的一部分:

    • 复选框值
    • 输入值
    • 无线电价值
    • ...
  2. 所有可用于构建查询并将其发送到API /数据库的最小数据,这些数据将返回完整的用户配置文件,朋友列表,等等......:

    • 用户身份
    • 创建日期范围
    • 物品ID
    • ...

对我来说,排除所有数据库/ API结果,因为:

  • 它站在数据层面
  • 可以通过发送权限(并由纯缩减器计算)查询来计算.

那你在这里有什么看法?

Dmi*_*nko 7

有关View Component状态的 React文档,但有关Application状态的 Redux文档.因此,定义之间没有冲突.

如果我们谈论Redux - 你将所有组件都没有状态(并在react-redux connect函数的帮助下将无状态根组件转换为有状态).如果您从服务器获得大量响应并且使用分页/过滤器显示数据,则可以将应用程序状态视为您在屏幕上看到的内容,而不是将所有数据都放在Redux存储中,只需将您需要的内容render(例如,100行)显示页面和显示分页的总行数.对此没有限制.您可以将整个数据放入另一个地方.例如,在web-worker中的另一个数据容器中(我在web-worker中发出完整请求,并从那里获取只需要显示的数据).


问题编辑后添加:

原始产品列表作为道具传递,因此不是状态.

在那个例子中,产品列表不是状态的原因 - 它已经存在props.这意味着父组件之一将其作为状态.