reactjs - 通过观察 ID 使 Apollo 客户端自动更新缓存
问题描述
我尝试使用带有 Apollo 客户端的 Next.js 设置 Shopify 商店。我只是想知道每当我将新商品放入购物车(在另一个组件中)时,让购物车组件从购物车中重新获取商品的最简单方法是什么。有问题的两个查询如下:
query ($id: ID!) {
node(id: $id) {
id
... on Checkout {
lineItems(first: 250) {
edges {
node {
id
title
quantity
}
}
}
}
}
}
在购物车组件中和
mutation checkoutLineItemsAdd(
$lineItems: [CheckoutLineItemInput!]!
$checkoutId: ID!
) {
checkoutLineItemsAdd(lineItems: $lineItems, checkoutId: $checkoutId) {
checkout {
id
}
}
}
在产品组件中。
阿波罗文档说
如果突变更新了单个现有实体,Apollo 客户端可以在突变返回时自动更新其缓存中该实体的值。为此,突变必须返回被修改实体的 id,以及被修改字段的值。方便的是,突变在 Apollo Client 中默认执行此操作。
我想知道结帐ID是否可以以某种方式用于在我的情况下启动此行为?
解决方案
我必须在突变查询中包含缓存信息,如下所示:
mutation checkoutLineItemsAdd(
$lineItems: [CheckoutLineItemInput!]!
$checkoutId: ID!
) {
checkoutLineItemsAdd(lineItems: $lineItems, checkoutId: $checkoutId) {
checkout {
id
lineItems(first: 250) {
edges {
node {
id
title
quantity
}
}
}
}
}
}
推荐阅读
- nginx - nginx 将 rtmp 流推送到 ffmpeg
- ssas-tabular - 清理 SSAS 服务器的 OLAP 文件夹中的旧开发模型
- asterisk - 如何在 Asterisk 的上下文中随时允许跳过或转到
- python - Geopandas + rasterio:将矢量隔离为png
- ruby-on-rails - 如何返回具有任何列匹配输入的任何行的任何记录
- flutter - 将标题和副标题添加到 Listview
- julia - 为什么这个for循环不能运行两次?(朱莉娅)
- javascript - 如果从 props 传递,Sass 变量将不起作用
- xposed - Xposed:如何以 My Xposed Module 的名义调用方法?
- arrays - 如何从对象中提取密钥?