【问题标题】:Apollo-client's cacheRedirect vs dataIdFromObjectApollo 客户端的 cacheRedirect 与 dataIdFromObject
【发布时间】:2018-09-03 17:59:32
【问题描述】:

我正在尝试防止重新获取以前缓存的数据。但是文档提供了几种通过cacheRedirectsdataIdFromObject 实现此目的的方法。我试图了解何时使用一种技术而不是另一种技术。

他是一个使用 dataIdFromObject 的示例流程——这是否会为 Apollo 从缓存中获取详细视图数据提供足够的上下文,还是我还需要一个 cacheRedirect 来链接 uuid 查询?

列表视图查询:

query ListView {
   books {
     uuid
     title
     abstract
   }
}

详细视图查询:

query DetailView {
   book(uuid: $uuid) {
     uuid
     title
     abstract
   }
}

使用dataIdFromObject 缓存构造函数参数:

new InMemoryCache({
   dataIdFromObject: object => {
     switch (object.__typename) {
       case 'book': return `book:${object.uuid}`;
       default: return defaultDataIdFromObject(object); // default handling
     }
   }
});

【问题讨论】:

    标签: apollo apollo-client


    【解决方案1】:

    我相信你说的不对

    但是文档提供了几种方法来实现这一点 通过 cacheRedirects 和 dataIdFromObject。

    我相信只有cacheRedirects才能达到你想要的。

    dataIdFromObject 允许您自定义 ApolloClient 应该如何唯一标识您的对象。默认情况下,ApolloClient 假定您的对象具有 id_id 属性,并将对象 __typenameid 属性组合以创建唯一标识符。

    通过提供dataIdFromObject 函数,您可以自定义此唯一标识符。例如,如果所有对象的 id 都是 uuid,那么您可以提供一个 dataIdFromObject 函数,它只是指示 ApolloClient 使用对象的 id 属性,而不附加 __typename

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 2018-10-28
      • 2018-07-08
      • 2017-03-18
      • 2018-02-02
      • 2019-06-07
      • 2020-08-08
      • 2019-07-25
      相关资源
      最近更新 更多