reactjs - 具有 Flux 模式的中继缓存?

标签 reactjs relayjs graphql

我真的很想将 Relay 缓存合并到我的 Flux 存储中,这样我就可以进行“时间旅行”并深入了解应用程序。

看起来中继存储和操作都是不可序列化的类,这很糟糕。但看起来我应该能够将缓存与网络请求分开并将缓存保存在 Flux 存储中。

这听起来有趣还是我找错了树?

最佳答案

Relay 当然可以与 Flux 一起使用,我们已经与许多成功地将它们一起使用的开发人员进行了交谈。一般模式是让 Relay 拥有服务器数据的缓存并管理与服务器的通信,并使用 Flux 来存储和更新仅限客户端的数据。

从 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(...) 注入(inject)缓存管理器来完成(请注意,API 名称可能会更改,但缓存管理器 API 本身是稳定的)。 CacheManager接口(interface)是defined here - 请注意,这将允许您记录写入 Relay 缓存的所有值,以构建您想要的数据可视化。写入缓存管理器的所有字段值都是 JSON 可序列化的。请注意,缓存管理器无法将数据写回到存储中,因此这主要允许您了解缓存的当前状态。
  • 通过注入(inject) custom network layer 拦截网络层的所有查询和突变请求。这将指示您的应用程序请求哪些数据以及从服务器接收哪些数据。

关于reactjs - 具有 Flux 模式的中继缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34409268/

相关文章:

reactjs - React-i18next 每个组件的翻译

javascript - 尝试使用 Gatsby 的 useStaticQuery 捕获节点信息

Firebase 和 GraphQL

reactjs - react 设置值选择不起作用,但在选项中使用选择就可以了

javascript - 如何将 Reactjs 与 Nodejs 结合使用,发送 html(组件)以响应 API

javascript - 如何在 React JS 中使用 Scroll 魔法

relayjs - @relay 的目的(模式 :true)

graphql - 在relay/graphql中获取特定列表项的附加信息

react-native - 将 Relay 与 React-Native 结合使用时的条件片段或嵌入的根容器

graphql - 当所有请求都具有相同的 URL 时,如何在开发工具网络选项卡中区分 GraphQL 请求?