微博 和 还原 通常不会持续 任何数据。他们将维持 临时 应用程序运行时的全局状态。
我知道有redux-persist
和 mobx-persist
两个社区内的软件包。但不幸的是这些persisting
解决方案似乎一点也不好。他们只有 stringify
或 serialize
一个全局状态树并使用某种键值存储来持久化它。对?
问题:
当这样的应用程序再次打开时,stringified
store 将被解析并结构化回其原始数据结构(例如 JSON),然后完全加载到 RAM 内存中。 我对吗?
如果是,这是一个问题。总是在内存中加载完整的“数据库”也就是“全局状态”是不好的。与在 SQLite 上查询表相比,在我的全局状态下过滤长数组中的数据可能永远不会更快,对吧?
我一直在寻找一些repository
- 为 redux 或 mobx 持久化全局状态的解决方案。我正在寻找一些解决方案,用于在一些知名的移动数据库(如 SQLite 或其他数据库)上持久化和查询数据。
任何答案将不胜感激。
最佳答案
我不太确定您需要什么,但如果我理解正确,您需要保留大量数据并加载相同的数据,但仅限于 批处理 .
我相信这类问题可以通过 repository pattern 来解决。和 SOLID 设计原则。
你会需要:
存储通过构造函数将存储库注入(inject)其中。
然后当您调用
initialize
方法,它与存储库对话并检索初始数据。现在,初始数据只能是所有持久化数据的子集。您可以在存储和存储库上实现某种分页,以根据需要批量检索数据。稍后您可以根据需要调用其他方法来加载和保存其他数据。伪代码:
class Repository(){
initialize()// load the first batch
load(next 10 models)
save(data)
}
class Store{
constructor(repository)
initialize(){
repository.initialize()
}
load(){
repository.load()
}
save(){
repository.save()
}
}
现在您的应用程序数据不应该是一个巨大的对象,而应该由多个存储区组成,每个存储区负责一部分数据。例如,您将有一个存储和存储库用于处理待办事项,另一对用于处理地址簿联系人等。附录:
存储库是 的原因注入(inject)进入商店,这样您就可以轻松地将其交换为其他一些实现(商店不关心数据是如何持久化和检索的),而且单元测试非常容易。
你也可以有一个根存储来保存所有其他存储,所以本质上你在一个地方拥有完整的状态。因此,如果您调用
serialize
在 root
store,它将所有存储序列化并返回一个大对象。
关于react-native - 使用 mobx 或 redux 还是使用存储库模式和持久本地存储领域或 sqlite?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66897271/