商店里真正属于多少州?

时间:2016-04-27 20:54:41

标签: reactjs flux reactjs-flux alt.js

我想知道,有多少州确实属于商店,而不属于组件?我在某些地方读到了真正所有州都应该住在商店里面的地方。

是否包含真正的组件特定内容,例如输入值(提交前),输入验证,模式是否打开,是否已点击某些内容等?

这里的最佳做法是什么?

4 个答案:

答案 0 :(得分:2)

明显的答案:
尽可能将组件特定状态(输入值,模态打开/关闭,点击内容,布局,格式化)保持在组件状态内。
和商店内的应用程序特定状态。其中包括但不限于您与服务器来回发送的内容。

那就是说,这里有很多灰色区域:

  • 是应用于搜索列表组件状态的过滤器吗?或应用状态(如果您保存过滤器以供将来访问同一页面)?
  • 是全局根菜单根组件状态或应用程序状态中的访问链接吗?
  • 如果您使用乐观更新,则可能需要在与服务器通信之前和之后保存用户输入内容。

我使用的一些经验法则:

  • 如果状态与组件具有相同的生命周期,则状态属于组件(因此,如果在组件安装之前不需要存在状态,并且在组件卸载后可能会忘记它)
  • 如果在关闭并重新打开应用程序时需要记住状态,最好将其放入商店(与服务器和/或本地存储进行交换)
  • 如果有疑问,只从组件中的状态开始:它使状态更加本地化(对组件)并使代码更易于管理。在稍后阶段,您始终可以将状态移至商店。

答案 1 :(得分:0)

查看特定于该组件的组件的状态。涉及许多组件的应用程序状态属于商店。

答案 2 :(得分:0)

这是值得商榷的。 例如,redux提出了一种模式,其中ALL状态属于商店。就我个人而言,我认为在许多情况下这是不切实际的。当我有任何理由存储例如商店中按钮的状态时,这是非常罕见的。 但有时它可能是有利的。当您的整个应用程序无状态时,测试肯定更容易。

答案 3 :(得分:0)

保持所有 可能某些应用程序有利。

首先,您应该尝试确定您的应用是否像这样。

  1. 如果您不确定某件州是否属于助焊剂店,那么它很可能不属于助焊剂店。
  2. You'll know when you need flux。当您达到对此类应用程序架构是否适合您的理解水平时,您可能也会知道最初问题的答案。
  3. 但是当然很高兴有一些特定的指南,也许只是一个心理指导,告诉你何时将状态保持在组件内部以及什么时候不要。

    我会选择这些指南:

      
        
    • 这个状态纯粹与UI有关吗?然后你可能不需要把它留在商店里。
    •   
    • 此状态是共享组件外的任何其他位置吗?如果没有,那就不要把它放在商店里。在组件内部没问题。
    •   
    • 此状态是否可以保留在URL中?如果是的话,那就不要把它放在商店里;把它放在网址中!它可能是输入或当前打开的选项卡的搜索查询。
    •   

    所有这些都可能有例外,但总的来说,我认为这与助焊剂应用的原始想法很吻合。

    P.S。另外我应该说有很多会谈说你应该(可能)将所有的UI保存在一个不可变的状态树中。这就是redux被引入很多人的方式。我认为你应该明白,虽然这是一个伟大的概念,它允许你如此保存/重播任何用户互动,但它往往不是不必要的,而不是Flux的主要思想。而redux本身是一个很好的助焊剂工具,不会迫使你保持商店中的所有UI状态。