如何在Flux / ReactJS中处理多个相同类型的存储
How to handle multiple stores of same type in Flux / ReactJS?
我是Flux/React的新手,我很难理解一些基本的架构决策:
- 我知道所有的商店都是单例的,但是它们都是在应用开始时创建的吗?或者商店的生命周期可以更小,具体到用户的操作?
- 我可以有相同存储类型的多个实例,每个实例初始化为不同的上下文吗?
不幸的是,我所看到的所有例子似乎都过于简单,无法回答这些问题。让我们从Facebook的聊天应用程序示例开始。有多个线程,每个线程都有消息。MessageStore保存整个应用程序的所有消息,一个名为getAllForThread(id)的方法返回经过过滤的消息子集。当消息进入任何线程时,它会发出一个更改通知,导致MessageSection反应组件重新获取数据(无论用户正在查看哪个线程)。这显然是不可伸缩的。如果我们有10,000个线程,每个线程都有大量的消息活动呢?下面是我决定解决这个问题的方法:
- 每个MessageStore用线程id初始化。
- 创建一个单例MessageStoreFactory来创建和管理MessageStores。
- 当用户点击一个线程时,React组件不是订阅全局的MessageStore,而是向MessageStoreFactory请求特定的线程的MessageStore。
- 如果工厂已经为该线程提供了一个MessageStore,它将返回它。否则,它创建一个,启动一个异步任务为它获取初始数据,并返回它。
- 当React组件被拆除时(假设用户从它那里导航走了),它会通知工厂它已经完成了对商店的所有操作。使用引用计数或其他一些缓存逻辑将允许工厂删除未使用的存储。
我用这种方法离基础有多远?有没有一种更简单的方法可以扩展?
根据用户正在查看的线程使更智能数据获取似乎更容易。我能在一些博客文章或演示中看到这个facebook的例子吗?
相关文章:
- 只能存储一种类型的对象的数组
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 如何将类似类型的多个对象添加到本地存储中
- 没有从本地存储获取与保存的变量相同的类型
- 在Flux体系结构中,如何管理存储相同类型数据的存储
- 想要将密码类型存储在 JavaScript 变量中
- 了解存储的MongoDB javascript函数中MongoDB命令的返回类型
- 当类型存储在变量中时,不使用eval创建对象的实例
- ExtJs 4.2, 网格中继来自存储加载事件的事件导致未捕获的类型错误: 未定义不是一个函数
- 在存储在变量中的xml上运行Xpath(获取“未捕获的类型错误:未定义不是函数”)
- 如何使用 Javascript 或 jQuery 将输入类型复选框存储到 json 对象中
- 为什么我在尝试访问存储在变量中的元素的值时出现类型错误
- 输入类型的存储值=“0”;隐藏的“;转换为不带javascript的php变量
- 变量存储函数作为基元类型或引用类型
- 是否可以像在Javascript对象中那样将整数值存储在localStorage中,并在不进行类型转换的情况下提取它
- 使用mongoose存储时间的数据类型
- LocalStorage是否以任何方式支持自定义(即非基元类型)对象存储和检索
- EXT.NET:“;未捕获的类型错误:无法读取属性'数据'未定义的“;将记录添加到存储时
- 聚合物如何得到同类型的孩子
- 嵌套具有属性回退的同类型javascript对象