如何在 Flux / ReactJS 中处理多个相同类型的商店?
How to handle multiple stores of same type in Flux / ReactJS?
我是 Flux/React 的新手,我很难理解一些基本的架构决策:
- 我知道所有的商店都是单例的,但它们都是在应用程序启动时创建的吗?或者商店的生命周期是否可以更短,具体到用户的操作?
- 我可以拥有相同商店类型的多个实例,每个实例都使用不同的上下文进行初始化吗?
不幸的是,我看到的所有示例似乎都过于简单,无法回答这些问题。让我们从 Facebook's chat app example 开始。有多个线程,每个线程都有消息。 MessageStore 保存了整个应用程序的所有消息和一个名为 getAllForThread(id) returns 的方法(过滤后的消息子集)。当一条消息进入任何线程时,它会发出一个更改通知,导致 MessageSection 反应组件重新获取数据(无论用户正在查看哪个线程)。这显然无法扩展。如果我们有 10,000 个线程,每个线程都有很多消息 activity 怎么办?以下是我决定如何解决这个问题:
- 每个 MessageStore 都使用线程 ID 进行初始化。
- 创建一个创建和管理 MessageStores 的单例 MessageStoreFactory。
- 当用户点击线程时,React 组件不会订阅全局 MessageStore,而是向 MessageStoreFactory 请求 那个特定 线程的 MessageStore。
- 如果工厂已经有该线程的 MessageStore,它 returns 它。否则它会创建一个,启动一个异步任务来为它获取初始数据,然后 returns 它。
- 当 React 组件被拆除时(假设用户离开它),它会通知 Factory Store 已全部完成。使用引用计数或其他一些缓存逻辑将允许工厂修剪未使用的存储。
我使用这种方法的基础有多远?是否有更简单的方法仍然可以扩展?
根据用户正在查看的线程更智能数据提取似乎更容易。我可以在某些博客-post 或演示文稿中看到这个 facebook 的示例吗?
我是 Flux/React 的新手,我很难理解一些基本的架构决策:
- 我知道所有的商店都是单例的,但它们都是在应用程序启动时创建的吗?或者商店的生命周期是否可以更短,具体到用户的操作?
- 我可以拥有相同商店类型的多个实例,每个实例都使用不同的上下文进行初始化吗?
不幸的是,我看到的所有示例似乎都过于简单,无法回答这些问题。让我们从 Facebook's chat app example 开始。有多个线程,每个线程都有消息。 MessageStore 保存了整个应用程序的所有消息和一个名为 getAllForThread(id) returns 的方法(过滤后的消息子集)。当一条消息进入任何线程时,它会发出一个更改通知,导致 MessageSection 反应组件重新获取数据(无论用户正在查看哪个线程)。这显然无法扩展。如果我们有 10,000 个线程,每个线程都有很多消息 activity 怎么办?以下是我决定如何解决这个问题:
- 每个 MessageStore 都使用线程 ID 进行初始化。
- 创建一个创建和管理 MessageStores 的单例 MessageStoreFactory。
- 当用户点击线程时,React 组件不会订阅全局 MessageStore,而是向 MessageStoreFactory 请求 那个特定 线程的 MessageStore。
- 如果工厂已经有该线程的 MessageStore,它 returns 它。否则它会创建一个,启动一个异步任务来为它获取初始数据,然后 returns 它。
- 当 React 组件被拆除时(假设用户离开它),它会通知 Factory Store 已全部完成。使用引用计数或其他一些缓存逻辑将允许工厂修剪未使用的存储。
我使用这种方法的基础有多远?是否有更简单的方法仍然可以扩展?
根据用户正在查看的线程更智能数据提取似乎更容易。我可以在某些博客-post 或演示文稿中看到这个 facebook 的示例吗?