我真的很想将 Relay 缓存合并到我的 Flux 存储中,这样我就可以进行“时间旅行”并深入了解应用程序。
看起来中继存储和操作都是不可序列化的类,这很糟糕。但看起来我应该能够将缓存与网络请求分开,并将缓存保存在 Flux 存储中。
这听起来很有趣还是我吠错了树?
我真的很想将 Relay 缓存合并到我的 Flux 存储中,这样我就可以进行“时间旅行”并深入了解应用程序。
看起来中继存储和操作都是不可序列化的类,这很糟糕。但看起来我应该能够将缓存与网络请求分开,并将缓存保存在 Flux 存储中。
这听起来很有趣还是我吠错了树?
Relay 当然可以与 Flux 一起使用,我们已经与许多成功地将它们一起使用的开发人员进行了交谈。一般的模式是让 Relay 拥有服务器数据的缓存并管理与服务器的通信,并使用 Flux 来存储和更新仅客户端数据。
如果 Flux 存储需要访问服务器数据,他们可以使用Relay.Store
API 从服务器获取数据并从缓存中读取它:
// build a query
var query = Relay.createQuery(Relay.QL`query { ... }`, {var: 'value'});
// fetch any missing data for this query
Relay.Store.primeCache({query}, readyState => {
if (readyState.done) {
// read data once the cache is populated
var data = Relay.Store.readQuery(query)[0];
}
});
Relay 不直接支持时间旅行调试。但是,我们正在积极开发 Relay 的开发者工具,它的初始版本应该很快就会推出。同时,有几个选项可以检查缓存的状态:
RelayStoreData.getDefaultInstance().injectCacheManager(...)
(注意 API 名称可能会改变,但缓存管理器 API 本身是稳定的)。CacheManager 接口在此处定义- 请注意,这将允许您记录写入 Relay 缓存的所有值,以构建您想要的任何数据可视化。写入缓存管理器的所有字段值都是 JSON 可序列化的。请注意,缓存管理器无法写入备份数据到店,所以这将主要是让你有可视性缓存的当前状态。