Design patterns 储蓄什么&;在Flux/Redux中不保存什么?

Design patterns 储蓄什么&;在Flux/Redux中不保存什么?,design-patterns,architecture,redux,flux,conceptual,Design Patterns,Architecture,Redux,Flux,Conceptual,所以我相信有不同的使用Redux的方法,我不确定这到底是一个好主意,还是我现在所做的完全错误。假设我有一个管理学校(班级和学生等)的软件。我现在使用Redux的方式如下: 1 首先,我要存储应用程序状态:选择哪个瞳孔,哪个视图当前处于活动状态,选中哪些复选框。我还将为首选项设置一个单独的减速机——即用户在其首选项设置中选择的内容。例如,软件的语言 在我看来,这与存储应用程序状态的想法不同,因为与应用程序状态相关的许多事情不是首选项,而是当前选择的内容。这种划分有意义吗?或者你会反对这种划分吗 2

所以我相信有不同的使用Redux的方法,我不确定这到底是一个好主意,还是我现在所做的完全错误。假设我有一个管理学校(班级和学生等)的软件。我现在使用Redux的方式如下:

1 首先,我要存储应用程序状态:选择哪个瞳孔,哪个视图当前处于活动状态,选中哪些复选框。我还将为
首选项设置一个单独的减速机
——即用户在其首选项设置中选择的内容。例如,软件的语言

在我看来,这与存储应用程序状态的想法不同,因为与应用程序状态相关的许多事情不是首选项,而是当前选择的内容。这种划分有意义吗?或者你会反对这种划分吗

2 此外,我还使用Redux来保存数据,所以我将它用作数据库。在我的例子中,我会将json完全加载到我的存储中,然后继续使用它。因此,我不仅在我的Redux存储中有活动的瞳孔(这将是应用程序状态本身),而且(在不同的减速机中)有每个瞳孔,然后根据需要,用活动的瞳孔喂给其他减速机等等


这是坏习惯吗?我是否应该尝试将其完全外包到一个“适当”的数据库中?

我可以给你一个实用的建议,就是避免将“当前学生”数据放入redux存储中。取而代之的是,只需在存储中收集学生,按id编制索引,并让您的react组件根据当前url从redux存储中选择数据(例如,在第
/products/345
页上,让您的组件使用用户345的数据)

这并不意味着您需要所有redux学生的数据。redux状态是一种数据库,但它只表示客户机知道的信息。例如,当用户到达页面
/studios/345
时,如果redux中没有studios 345,则触发从服务器获取该数据的操作

对于当前的UI状态,主要的一点是将数据保存在一个位置,“单一真实来源”。该位置可以是:

  • 当前url(使用react路由器):非常适合“哪个视图处于活动状态”
  • Redux商店:当它影响多个单独的组件时很好,例如当前语言
  • 单个有状态组件的状态(如果状态是某个组件的本地状态,并且您不需要redux的额外功能和复杂性,那么这是一个很好的解决方案)

我能给你的一个实用技巧是避免将“当前瞳孔”数据放入redux存储中。取而代之的是,只需在存储中收集学生,按id编制索引,并让您的react组件根据当前url从redux存储中选择数据(例如,在第
/products/345
页上,让您的组件使用用户345的数据)

这并不意味着您需要所有redux学生的数据。redux状态是一种数据库,但它只表示客户机知道的信息。例如,当用户到达页面
/studios/345
时,如果redux中没有studios 345,则触发从服务器获取该数据的操作

对于当前的UI状态,主要的一点是将数据保存在一个位置,“单一真实来源”。该位置可以是:

  • 当前url(使用react路由器):非常适合“哪个视图处于活动状态”
  • Redux商店:当它影响多个单独的组件时很好,例如当前语言
  • 单个有状态组件的状态(如果状态是某个组件的本地状态,并且您不需要redux的额外功能和复杂性,那么这是一个很好的解决方案)

    • 有一篇名为的好文章,它试图对应用程序中不同类型的数据进行分类。这取决于您决定将哪些应用于Redux。引述:

      确定应将何种数据放入Redux的一些常见经验法则:

      • 应用程序的其他部分是否关心此数据
      • 您是否需要能够基于此原始数据创建进一步的派生数据
      • 是否使用相同的数据驱动多个组件
      • 能够将此状态恢复到给定的时间点(即,时间旅行调试)对您有价值吗
      • 是否要缓存数据(即,如果数据已经存在,则使用状态中的数据,而不是重新请求)
      因此,在Redux中存储获取的数据和本地应用程序状态完全没有问题


      当您遵循建议的实践时,Redux本身就有点像客户端数据库。My展示了跟踪列表中当前选定的项目以及实现对当前选定项目的编辑的示例。

      有一篇很好的文章,名为《尝试对应用程序中不同类型的数据进行分类》。这取决于您决定将哪些应用于Redux。引述:

      确定应将何种数据放入Redux的一些常见经验法则:

      • 应用程序的其他部分是否关心此数据
      • 您是否需要能够基于此原始数据创建进一步的派生数据
      • 是否使用相同的数据驱动多个组件
      • 能够将此状态恢复到给定的时间点(即,时间旅行调试)对您有价值吗
      • 是否要缓存数据(即,如果数据已经存在,则使用状态中的数据,而不是重新请求)
      因此,在Redux中存储获取的数据和本地应用程序状态完全没有问题

      当您遵循建议的实践时,Redux本身就有点像客户端数据库。My显示了跟踪列表中当前选定的项目并实现的示例