如何强制 Apollo Client 使用缓存数据

2024-02-12

我们有一个最初加载小部件列表的应用程序:

query Widgets() {
    widgets() {
        ...Widgets
    }
}

fragment Widgets on Widgets {
    name
    description
    rootWidget
    widgets {
        ...WidgetInterface
    }
}

fragment WidgetInterface on WidgetInterface {
    id
    name
    description
    type
}

稍后我渲染这个小部件,其中每个 React 组件都用另一个 graphql 调用包装以获取单个小部件的数据。当我们最初获取这些数据时,我希望 apollo 从本地存储中获取数据,但它总是使服务器调用

#import '../fragments/WidgetInterface.graphql'

query Widget($id: ID!) {
    widgetDetails(id: $id) {
        ...WidgetInterface
    }
}

那么有没有办法检查为什么 apollo 不使用缓存的呢?


Apollo 按查询缓存您的查询结果。它从服务器而不是缓存中获取数据的原因是,第一次渲染组件时,您从未制作过widgetDetails查询,只有一个widgets one.

如果您想避免widgetDetails查询,您可以设置您的组件以使用widgets改为查询并自己按 id 过滤结果。就像是:

graphql(WIDGETS_QUERY, {
  props: ({data, ownProps}) => ({ widget: data.widgets.filter(w => w === ownProps.widgetId) })
})(MyComponent)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何强制 Apollo Client 使用缓存数据 的相关文章

  • Apollo graphQL 中 useQuery 和 useLazyQuery 有什么区别?

    我正在浏览 Apollo React hooks 的文档 并看到有两个查询钩子可供使用 其中是useQuery and useLazyQuery 我正在读这一页 https www apollographql com docs react
  • 将 graphql 变量传递给 Material UI 组件

    我正在使用 React Typescript 并有一个自动完成材质 UI 组件 我正在尝试将查询建议添加到自动完成组件中 我的 graphql 查询如下所示 查询定义 import gql from graphql tag import u
  • Apollo 的 Check-and-run-apollo-codegen.sh 不起作用?

    我正在尝试在我的 iOS 项目中安装 Apollo 我按照此处的说明进行操作 https www apollographql com docs ios installation html https www apollographql co
  • 使用 React Hooks 出现“太多重新渲染”错误

    我在这里遇到了 React Hooks 的困扰 我在网上查找 但无法弄清楚如何使这些示例适应我的代码 我有以下组件会触发 太多重新渲染 错误 const EmailVerification gt const showMessage setS
  • React Apollo GraphQL 搜索/过滤

    我有一个使用 Apollo 客户端的带有 GraphQL 服务器的 React 项目 我试图弄清楚如何根据搜索文本和过滤选择更改查询结果 如果有人可以查看我的代码并给我一些帮助 我将不胜感激 对所有代码感到抱歉 我想也许它们都是相关的 服务
  • 使用 apollo graphql 反应 firebase 身份验证

    我发现一篇很棒的文章将身份验证添加到反应中 文章 https www robinwieruch de complete firebase authentication react tutorial https www robinwieruc
  • 如何动态更改 Apollo Web Socket Link URI?

    目前我已经设置了 Apollo websocket 链接 如下所示 const wsLink new WebSocketLink uri ws example com graphql token getToken options recon
  • Apollo 客户端从缓存中删除 Item

    我正在使用带有 React 的 Apollo 客户端 我用许多不同的变量查询帖子 所以我在不同的 缓存 中有一篇文章 现在我想删除一个帖子 所以我需要从所有 缓存 中删除这个特定的帖子 const client new ApolloClie
  • 如何在世博会上运行“@apollo/client”

    我有一个裸露的反应本机 然后我将项目转换为expo项目 因为该项目没有与主 React Native 项目一起运行 所以在创建 expo 项目后 我尝试运行该项目 但它给了我这个错误 While trying to resolve modu
  • 如何处理返回布尔值的 GraphQL 查询?

    需要在用户注册过程中检查电子邮件是否可用或已被占用 目标是使用 GraphQL API 服务器快速查询 并让它告诉我们电子邮件是否可用或已被占用 使用 GraphQL 处理简单布尔类型情况的一般最佳实践是什么 以下是我的想法 但我不确定这是
  • 当数据在缓存中时 Apollo Client client.readQuery 返回 null

    这一定是用户错误 但我有一个简单的应用程序currentUser查询在 JWT 中查找 id 查找它并返回相应的用户 我可以查看 devtools 并看到它在缓存中 ref User 19 export const CURRENT USER
  • Apollo-client (react) - 创建突变更新 - “在对象 (ROOT_QUERY) 上找不到字段 Fund({})”

    使用 react apollo 1 4 3 在父组件中 我使用 GraphQL 查询父节点 Fund 和子节点 fundQuarterlyMetric 这将返回以下格式的数据 id name fundQuarterlyMetrics ord
  • Nestjs Apollo graphql上传标量

    我正在使用 Nestjs graphql 框架 我想使用 apollo 标量上传 我已经能够在另一个不包含 Nestjs 的项目中使用标量 schema graphql App module ts注册graphql GraphQLModul
  • 即使目标对象存在,Apollo readQuery 也会失败?

    我正在调用 readQuery 我收到一条错误消息 modules js hash 2d0033b4773d9cb6f118946043f7a3d4385825fe 25847 Error Can t find field resoluti
  • 生产中未使用快速会话设置 Cookie

    我的应用程序分为客户端和服务器 客户端是托管在 Now sh 上的前端 Nextjs 应用程序 服务器是使用 Express 创建并托管在 Heroku 上的后端 因此域是 client app now sh 和 server app he
  • Apollo 客户端“未找到命名导出‘删除’”

    我正在尝试创建一个apollo client插件Nuxt 3应用 它当前抛出有关名为的包的错误ts invariant file Users my name Repositories project node modules apollo
  • 动态 GraphQL 模式?

    我有一个突变 将提交表单数据 该数据可能会根据您填写的表单而有所不同 表单将会很多 并且它们将共享相同的 步骤 每个表单由 1 个或多个页面 步骤组成 因此 我们可能有这些可重用的步骤 最喜欢的水果 出生日期 名和姓 还有这两种形式 通用信
  • apollo 客户端从存储中删除而不发生突变

    我需要通过 id 从本地存储中删除一条 记录 而不使用突变 因为服务器不支持突变 我尝试像这样手动访问商店 delete this apolloClient store getState apollo data 1112 这会删除记录 但是
  • 如何为 Apollo 的 React HOC 定义 props 接口?

    我正在尝试使用 Apollo 的 React HOC 来获取数据并将其传递给我的组件 但出现以下错误 Argument of type typeof BrandList is not assignable to parameter of t
  • 如何使用 useQuery 挂钩来填充其他挂钩中的状态?

    我最近一直在处理一些与钩子相关的问题 因为我一直在我的一个项目中实现钩子 我不断收到错误 渲染的钩子数量比上一次渲染期间的钩子数量多 看来我能让代码正常工作的唯一方法是将 useQuery 挂钩放在所有其他挂钩之后 然而 这是一个问题 因为

随机推荐

  • WooCommerce REST API - 获取订单的自定义字段

    我正在使用 WooCommerce REST API http woocommerce github io woocommerce rest api docs introduction http woocommerce github io
  • 如何使用rvm升级ruby on Rails应用程序的ruby版本

    如何使用 rvm 安全地升级我的 ruby on Rails 应用程序以使用新的 ruby 版本 假设您的应用程序是 my app 并且您正在使用 ruby 版本 a b c 并且想要转到 ruby 版本 x y z Step 0 开始之前
  • Itunes Connect 将桌面显示为 iPad 应用程序的平台

    今天我注意到 iTunes Connect 销售和趋势部分有了新皮肤和一些新功能 但是我公司的应用程序 仅适用于 iPad iPhone 似乎可以在桌面上下载 有谁知道 桌面 对于 iOS 应用程序意味着什么 它适用于 Mac 应用商店应用
  • Android:GraphView 如何在 X 轴上实现时间?

    我发现很难弄清楚如何在 Android 中的图表的 X 轴上实现时间 这是我的代码 for int i 0 i lt listSize i String onlyReading mData get i getReading split re
  • gem 和插件有什么区别?

    我是 Rails 新手 对 gems 和插件的概念感到困惑 谁能为我解释一下吗 插件只是从特定目录加载的库 gems 通过加载Bundler http gembundler com or RubyGems http rubygems org
  • WCF - 设计参数决策

    我正在为基金管理设计一项服务 基金管理服务有一个名为 UpdateFundApprovalDate FundDTO 基金 的操作 此操作将使用fundingID 的批准日期更新资金表记录 该服务将由 FundManagementUI 客户端
  • SQL 使用 CASE 语句更新列中的行

    我有两个表 用户和 TempTable 它是用户的子集 我想更新 Users 表中的 IsActive 列 如果 TempTable 中的用户也在 Users 表中 我想设置 IsActive 1 否则设置 IsActive 0 从不在 T
  • 如何从传奇中发送重击?

    我知道我不应该尝试从 sagas 中发送 thunks 这违背了 redux saga 试图做的事情 但我正在一个相当大的应用程序中工作 大部分代码都是用 thunk 编写的 我们正在按位迁移 需要从 saga 内部调度 thunk thu
  • 使用 java 编写 .ics iCal 文件

    我正在尝试使用 java 实现我自己的 iCal 创建器 但由于某种原因我无法识别我的 ics 文件 我想知道我做错了什么 我可以获得与维基百科的示例完全相同的输出 ics 文件和我的程序生成的一次文件有什么区别 他们的例子 BEGIN V
  • 运行多个实例时无法启动logstash - path.data 设置

    你好 我是 ELK 堆栈内部的新手 在后台运行一个logstash进程 当它找到匹配的文件模式时 它如下所示 我想了解这里的重要性是什么path data选项 请帮帮我 FATAL logstash runner Logstash coul
  • swig 用变量扩展模板类

    我正在为模板类构建 Swig 接口 在我的 pyinterface i 文件中 我声明 template myclass MyClass
  • Matlab 3d 体积可视化和 3d 叠加

    问题几乎就是标题 我有一个作为原始数据加载的 3d 体积 256 256 256 size A 它仅包含零和一的值 其中 1 代表结构 0 代表 空气 我想在 MATLAB 中可视化该结构 然后对其运行算法并在其上覆盖一个覆盖层 假设颜色为
  • node-mysql 一个查询中的多个语句

    我在用着nodejs 10 26 express 3 5 node mysql 2 1 1 MySQL Server Version 5 6 16 我有 4 个 DELETE 只需要 1 个数据库请求 所以我用 连接 DELETE 命令 但
  • Flask url_用于生成 http URL 而不是 https

    我在用url for当用户注销时生成重定向 URL return redirect url for index external True 但是 当我将页面更改为https连接 将url for仍然给我http 我想明确询问url for
  • Laravel 空白白页

    我在群组中的获取路线有问题 这是我的代码 Route group prefix gt commodities function Route get commodities as gt showCommodities uses gt Comm
  • Python格式整数转换为固定长度字符串[重复]

    这个问题在这里已经有答案了 我想根据一个生成一个字符串int和零一起 并且长度应该始终为5不多也不少 For example Consider a Integer 1 Formatted String 00001 Consider a In
  • 什么是私有字节、虚拟字节、工作集?

    我正在尝试使用 perfmon windows 实用程序来调试进程中的内存泄漏 这是 perfmon 对这些术语的解释 工作集是该进程的工作集的当前大小 以字节为单位 工作集是进程中的线程最近接触的内存页集 如果计算机中的可用内存高于阈值
  • 为什么要对参数进行 null 转换? [复制]

    这个问题在这里已经有答案了 何时以及为什么有人会做以下事情 doSomething MyClass null 你曾经这样做过吗 您能分享一下您的经验吗 If doSomething已重载 您需要将 null 显式转换为MyClass因此选择
  • 计算给定月份的前 12 个月 - SimpleDateFormat

    我试图将给定月份 取自数据库 中的前 12 个月放入数组列表中 List
  • 如何强制 Apollo Client 使用缓存数据

    我们有一个最初加载小部件列表的应用程序 query Widgets widgets Widgets fragment Widgets on Widgets name description rootWidget widgets Widget