当前位置: 首页 > 知识库问答 >
问题:

在Flux架构中,如何管理存储生命周期?

林俊英
2023-03-14

我正在阅读关于Flux的文章,但是Todo应用程序的例子太简单了,我无法理解其中的一些关键点。

想象一下,像Facebook这样的单页应用程序拥有用户配置文件页面。在每个用户配置文件页,我们想显示一些用户信息和他们的最后一个帖子,无限滚动。我们可以从一个用户配置文件导航到另一个用户配置文件。

在Flux架构中,这将如何对应于存储和调度器?

我们是为每个用户使用一个PostStore,还是使用某种全局存储?那么dispatchers呢,我们是为每个“用户页”创建一个新的Dispatcher呢,还是使用一个单例?最后,体系结构的哪一部分负责管理“页面特定”存储的生命周期,以响应路由更改?

而且,单个伪页可能有几个相同类型的数据列表。例如,在配置文件页面上,我希望同时显示关注者和追随者。在这种情况下,单例userstore如何工作?UserPageStore会管理FolloWedby:userstorefollowstore吗?

共有1个答案

爱茂勋
2023-03-14

在一个Flux应用程序中,应该只有一个调度器。所有的数据都流经这个中央集线器。拥有一个单例分派器允许它管理所有的存储。当您需要更新商店#1本身,然后根据操作和商店#1的状态更新商店#2本身时,这就变得非常重要。Flux假设这种情况在大型应用程序中是可能发生的。理想情况下,这种情况不需要发生,如果可能的话,开发人员应该努力避免这种复杂性。但是singleton Dispatcher已经准备好在时机到来时处理它。

商店也是单一的。它们应该尽可能地保持独立和解耦--一个可以从控制器视图查询的自包含的宇宙。进入商店的唯一途径是通过它向调度程序注册的回调。唯一的出路是通过getter函数。存储区在状态发生变化时还会发布事件,因此控制器视图可以使用getter知道何时查询新状态。

在您的示例应用程序中,将有一个PostStore。这个商店可以管理一个“页面”(伪页面)上的帖子,这个页面更像是FB的Newsfeed,在这个页面上,帖子来自不同的用户。它的逻辑域是帖子列表,它可以处理任何帖子列表。当我们从伪页面移动到伪页面时,我们希望重新初始化存储区的状态以反映新的状态。我们可能还希望在localStorage中缓存以前的状态,作为在伪页面之间来回移动的优化,但我倾向于设置一个PageStore,它等待所有其他存储,为伪页面上的所有存储管理与localStorage的关系,然后更新它自己的状态。请注意,这个pagestore不会存储任何关于帖子的内容--这是poststore的域。它只需知道某个特定的伪页面是否已被缓存,因为伪页面是它的域。

PostStore将有一个initialize()方法。此方法将始终清除旧状态,即使这是第一次初始化,然后根据它通过Dispatcher通过操作接收的数据创建状态。从一个伪页面移动到另一个伪页面可能涉及page_update操作,该操作将触发对initialize()html" target="_blank">调用。关于从本地缓存中检索数据、从服务器中检索数据、乐观呈现和XHR错误状态,有一些细节需要解决,但这是总体思路。

如果一个特定的伪页面不需要应用程序中的所有存储,除了内存限制之外,我不完全确定有什么理由销毁未使用的存储。但是存储通常不会消耗大量内存。您只需要确保删除正在销毁的控制器视图中的事件侦听器。这是在React的componentWillunmount()方法中完成的。

 类似资料:
  • 问题内容: 我正在阅读有关Flux的信息,但示例Todo应用程序对于我来说太简单了,无法理解一些关键点。 想象一下像Facebook这样的具有 用户个人资料页 的单页应用程序。在每个用户个人资料页面上,我们要无限滚动地显示一些用户信息及其最新帖子。我们可以从一个用户个人资料导航到另一个。 在Flux体系结构中,这将与商店和调度员相对应吗? 我们会为每个用户使用一个,还是会有某种全球商店?调度程序呢

  • 在Facebook关于Flux架构的演讲中,Jing在12:17提到dispatcher强制要求,在当前操作被商店完全处理之前,不能调度任何操作。 这里的调度员是执行没有级联效应的主要部分;一旦一个操作进入商店,在商店完全处理完它之前,您不能再放入另一个操作。 那么,我的问题是,如何正确地处理可能从存储区中删除的长时间运行的异步操作(例如,Ajax请求,或处理其他外部异步API)--任何阻止完成操

  • 问题内容: 我正在开发一个应用程序,并且已经开始与和一起使用。Web容器为。 我对豆子的生命周期感到非常困惑,因此我需要一个很好的建议来清除一些想法。通常,我已阅读的内容应主要在容器中使用,并使用注释将其注入。因此,然后容器要注意其使用寿命。但是,如果您不使用容器(如),那么我需要管理自己的生活。 现在,使用哪种方法是我最好的选择?我现在正在做的事情如下: 因此,基本上,我只是使用Plain 来完

  • 第二个存储区是。它的责任是管理随机选择的TODO项目。在我看来,应该使用通过访问TODO项。 问题在于,如前所述,在启动时不会加载TODO项。 问题是:“如何保证已经检索了TODO项?”

  • 我试图使用django创建一个项目,并填充数据库,我的问题是,当我尝试创建一个新对象时,我得到了这个错误:重复键值违反了唯一约束,因为数据库已经填充,我可以做什么来更改它,使Postgres管理它或Djang0获得正确的序列?提前感谢

  • 该节将带领大家了解Kubernetes中的基本概念,尤其是作为Kubernetes中调度的最基本单位Pod。 本节中包括以下内容: 了解Pod的构成 Pod的生命周期 Pod中容器的启动顺序模板定义 Kubernetes中的基本组件kube-controller-manager就是用来控制Pod的状态和生命周期的,在了解各种controller之前我们有必要先了解下Pod本身和其生命周期。