我有一个与中继集成的React Native应用程序,我想为用户提供离线第一体验。
因此,在第一个应用程序中,应在加载数据时显示占位符。之后,每次启动应用程序时,我都想在加载新数据时显示最后一个缓存的数据。
我从2015年开始找到了这个问题,并基于Eyston的答案,我尝试使用AsyncStorage
基于中继速率管理器实现CacheManager
。使用CacheManager,我可以从缓存中保存和加载中继记录,但是当网络被禁用后,应用程序无法显示缓存的数据。
继电器正在获取新数据时,是否有任何使用中继缓存数据?
我们有一个生产应用程序,该应用程序使用继电器和RealMDB进行离线体验。我们与CacheManager采取了另一种方法,因为当时CacheManager还没有准备好。我们为此使用了继电器 - 局部策略。
我们使用继电器 - 本地式拨号定义了移动所需的整个架构。这可能与您的后端服务器用于定义GraphQL架构的文件相同,并更改RESOLVE功能以从Realm DB解析数据。为此,我们还创建了RealMDB中的架构,该模式的结构与GraphQL架构几乎相同,以简单地编写后端服务器返回到RealMDB的数据。您还可以使用GraphQL内省查询来自动化此模式。我们定义了一个自定义网络层,确保所有中继查询始终触摸本地数据库。在sendQueries
函数中,所有查询都通过中继 - 局部策略解决了所有查询,该问题得以快速解决,React视图显示了旧数据,同时为sendQueries
函数中的每个请求提出了网络请求。从网络请求接收数据时,它是在realmdb中编写的,并且继电器内存在存储中还填充了新数据,这会自动刷新所有数据更改的React视图。为了将数据写入中继内存存储,我们使用了以下无证件方法
Relay.Store.getStoreData().handleQueryPayload(query, response);
您可以使用request.getQuery()
中在Sendqueries函数中收到的请求获取查询对象。
我们当前的实现与我们的业务逻辑有点束缚,因此很难开源此逻辑。我会尝试提供一个演示应用程序。