在获取新数据时,在react-native应用程序上使用中继缓存数据

Hel*_*tos 5 caching offline-caching react-native relayjs

我有一个与Relay集成的React Native应用程序,我想为用户提供离线优先体验.

因此,在第一个应用程序启动时,应在加载数据时显示占位符.之后,每次启动应用程序时,我都希望在加载新数据时显示最后的缓存数据.

从2015年发现了这个问题,基于eyston的回答,我试图使用.实现CacheManager基于relay-cache-managerAsyncStorage.使用CacheManager,我可以从缓存中保存和加载中继记录,但是当网络被禁用时,应用程序无法显示缓存数据.

在中继获取新数据时,是否有任何使用中继缓存数据的方法?

met*_*ors 5

我们有一个生产应用程序,它使用Relay和RealmDB进行离线体验.我们从CacheManager采取了一个单独的方法,因为那时CacheManager还没有完全准备好.我们为此使用了relay-local-schema.

我们使用relay-local-schema定义了移动设备所需的整个架构.这可能与您的后端服务器用于定义graphql架构和更改解析函数以解析来自realm db的数据的文件相同.为此,我们还在realmdb中创建了模式,该模式与graphql模式具有几乎相同的结构,以简化将后端服务器返回到realmdb的数据写入.您还可以使用graphql内省查询自动生成此模式.我们定义了一个自定义网络层,我们确保所有中继查询始终触及本地数据库.在该sendQueries函数中,所有查询都使用relay-local-schema解析,该解析非常快,并且反应视图显示旧数据,同时对sendQueries函数中的每个请求发出网络请求.在从网络请求接收数据时,它在realmdb中写入,并且内存中的内存也存储有新数据,这会自动刷新其数据发生变化的所有反应视图.要将数据写入Relay内存存储区,我们使用了以下未记录的方法

Relay.Store.getStoreData().handleQueryPayload(query, response);
Run Code Online (Sandbox Code Playgroud)

您可以从sendQueries函数中使用的请求中获取查询对象request.getQuery().

我们当前的实现与业务逻辑有点紧密相关,因此很难开源这个逻辑.我会尝试提供一个演示应用程序.