gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:59:06 24 4
gpt4 key购买 nike

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

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

我找到了this issue from 2015并基于 eyston's answer我尝试实现 CacheManager基于 relay-cache-manager使用 AsyncStorage .使用 CacheManager 我可以从缓存中保存和加载中继记录,但是当网络被禁用时,应用程序无法显示缓存的数据。

在中继获取新数据时,有什么方法可以使用中继缓存的数据吗?

最佳答案

我们有一个使用 Relay 和 RealmDB 的生产应用程序线下体验。我们采用了与 CacheManager 不同的方法,因为当时 CacheManager 还没有完全准备好。我们使用了relay-local-schema为了这。

我们使用中继本地模式定义了移动设备所需的整个模式。这可能与您的后端服务器用于定义 graphql 架构并更改解析函数以解析来自领域 db 的数据的文件相同。为此,我们还在 realmdb 中创建了架构,其结构与 graphql 架构几乎相同,以便将后端服务器返回的数据写入 realmdb。您还可以使用 graphql 自省(introspection)查询自动生成此模式。我们定义了一个 custom network layer我们确保所有中继查询始终触及本地数据库。在 sendQueries功能所有查询都使用relay-local-schema解决,它得到非常快的解决, react View 显示旧数据,同时为sendQueries中的每个请求发出网络请求功能。在接收来自网络请求的数据时,它被写入 realmdb 并且内存中的 Relay 存储也填充了新数据,这会自动刷新所有数据更改的 react View 。要将数据写入 Relay 内存存储,我们使用了以下未记录的方法

Relay.Store.getStoreData().handleQueryPayload(query, response);

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

我们当前的实现与我们的业务逻辑有点捆绑,因此很难开源这个逻辑。我会尽量提供一个演示应用程序是可能的。

关于caching - 在获取新数据时在 react-native 应用程序上使用中继缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42604115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com