我想知道,有多少状态真正属于商店,而不属于组件?我在一些地方读到过,所有州都应该住在商店里。
这是否包括真正特定于组件的内容,例如输入值(在提交之前)、输入验证、模式是否打开、是否已单击某些内容等?
这里有哪些最佳实践?
我想知道,有多少状态真正属于商店,而不属于组件?我在一些地方读到过,所有州都应该住在商店里。
这是否包括真正特定于组件的内容,例如输入值(在提交之前)、输入验证、模式是否打开、是否已单击某些内容等?
这里有哪些最佳实践?
显而易见的答案:
尽可能将组件特定状态(输入值、模式打开/关闭、单击的内容、布局、格式)保持在组件状态中。
以及商店内的应用特定状态。其中包括但不限于您与服务器来回发送的内容。
也就是说,这里有很多灰色区域:
我使用的一些经验法则:
将所有内容保存在通量商店中可能对某些应用程序有益。
因此,首先,您应该尝试确定您的应用程序是否是这样的。
但是当然,有一些特定的指南是很好的,也许只是一个心理指南,告诉你什么时候保持状态在组件内,什么时候不保持。
我会选择这些指南:
- 这种状态纯粹与 UI 相关吗?那么您可能不需要将其保存在商店中。
- 此状态是否在组件之外的其他任何地方共享?如果没有,那就不要把它放在商店里。在组件内部很好。
- 这个状态可以保存在 URL 中吗?如果是这样,那就不要把它放在商店里;把它放在网址中!它可能是输入或当前打开的选项卡的搜索查询。
所有这些可能都有例外,但总的来说,我认为这与通量应用程序的原始想法很好地对应。
PS 另外我应该说,有很多谈话说您应该(可能)将所有 UI 保留在不可变的状态树中。这就是向很多人介绍 redux 的方式。我认为你应该明白,虽然这是一个很棒的概念,它允许你保存/重放任何用户交互,但它通常不是不必要的,这不是 Flux 的主要思想。而且 redux 本身是一个很棒的通量工具,它不会强迫您将所有 UI 状态保留在商店中。
特定于组件的视图状态属于该组件。涉及许多组件的应用程序状态属于商店。
这是值得商榷的。例如,redux 提出了一种模式,其中所有状态都属于 store。我个人认为在许多情况下这是不切实际的。当我有任何理由存储商店中按钮的状态时,这是非常罕见的。但有时它可能是有利的。当您的整个应用程序是无状态的时,测试肯定会更容易。