我已经使用香草React一段时间了,现在决定对我正在做的新项目的Redux进行仔细研究.
最初,我给人的印象是所有用户活动都应导致动作,主要原因之一是您可以通过回放适当的动作来重构任何应用程序状态.
但是,这样做的问题是,您在商店中放置了很多东西,实际上这些东西感觉不像应用程序状态.诸如“如果我专注于此输入,标签会变成绿色”之类的东西似乎不适合在可能由数百个组件组成的应用程序的应用程序状态中表示的状态.这些事情对于典型的todo教程来说是完全有意义的,但是很难看到它在更复杂的情况下将如何发展.
然后,我阅读了更多内容,发现在创建者Dan Abramov的支持下,一般的意见是您通常应将本地组件状态与应用程序状态(存储)结合起来. “凡是看起来最尴尬的东西”似乎都是存储状态的经验法则.
一方面,这完全有道理:真正属于应用程序状态且与多个组件相关的事物应存储在存储器中,而仅涉及单个组件的严格呈现细节应使用正常的反应状态进行处理.另一方面,这种方法使我有些困惑,因为我一开始就这样写:redux并不是要避免在组件之间分配状态,而是能够重新创建状态,这并不是很重要.仅存储动作?
我希望有人能对此问题有所了解,因为它一直困扰着我,我认为在尝试使用redux构建一些复杂的东西之前,我应该对此有一个明确的意见.
解决方法:
您将什么状态放在哪里完全取决于您.有时将所有内容放入Redux可能有意义,有时将内容保留在组件中可能很有意义.我最近看到了一些好的经验法则:
>应用程序的其他部分是否关心该数据?
>您是否需要能够从该数据中获取更多数据?
>是否使用相同的数据来驱动多个组件/功能?
>对于将状态恢复到给定时间点(例如:时间旅行/调试),您是否有价值?
>是否要缓存数据,即:如果数据已经存在,则从状态中重新加载它,而不是再次请求它?
另请参阅关于以下主题的Redux常见问题解答:http://redux.js.org/docs/FAQ.html#organizing-state-only-redux-state.