Javascript 如何用redux处理组件状态?

Javascript 如何用redux处理组件状态?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我已经使用vanillarreact有一段时间了,现在我决定在我正在做的一个新项目中仔细研究Redux 起初我的印象是,所有的用户活动都应该导致操作,其中一个主要原因是,您可以通过回放适当的操作来重建任何应用程序状态 然而,问题是,您在商店中放了很多实际上感觉不象应用程序状态的东西。像“如果我关注这个输入,标签会变成绿色”这样的东西似乎不适合在可能由数百个组件组成的应用程序的应用程序状态中表示。这些事情在典型的todo教程中完全有意义,但在更复杂的场景中,很难看到它的效果 然后我读了更多,发现由

我已经使用vanillarreact有一段时间了,现在我决定在我正在做的一个新项目中仔细研究Redux

起初我的印象是,所有的用户活动都应该导致操作,其中一个主要原因是,您可以通过回放适当的操作来重建任何应用程序状态

然而,问题是,您在商店中放了很多实际上感觉不象应用程序状态的东西。像“如果我关注这个输入,标签会变成绿色”这样的东西似乎不适合在可能由数百个组件组成的应用程序的应用程序状态中表示。这些事情在典型的todo教程中完全有意义,但在更复杂的场景中,很难看到它的效果

然后我读了更多,发现由创建者Dan Abramov支持的一般观点是,您通常应该将本地组件状态与应用程序状态(存储)结合起来。“似乎最不尴尬的事情”似乎是存储状态的经验法则

一方面,这是完全有意义的:真正属于应用程序状态且与多个组件相关的内容应该在存储中,而仅涉及一个组件的严格表示细节应该使用正常的react状态进行处理。另一方面,这种方法让我有点困惑,因为我在一开始写过:redux的一个要点不是很重要,你可以避免在组件之间分布状态,你可以通过存储动作来重新创建状态吗


我希望有人能解释一下这个问题,因为它一直困扰着我,我认为在尝试用redux构建复杂的东西之前,我应该对它有一个明确的看法。

你把什么状态放在哪里完全取决于你自己。有时将所有内容都放在Redux中是有意义的,有时将内容保存在组件中也是有意义的。我最近看到了一些很好的经验法则:

  • 应用程序的其他部分是否关心该数据
  • 您是否需要能够从该数据中获取更多数据
  • 是否使用相同的数据驱动多个组件/功能
  • 能够将状态恢复到给定的时间点(即:时间旅行/调试)对您有价值吗
  • 是否要缓存数据,即:如果数据已经存在,则从状态重新加载数据,而不是再次请求数据
(这张榜单的功劳在于此。)

另请参阅有关此主题的Redux常见问题解答: