gpt4 book ai didi

vue.js - 使用尚不存在的查询从 apollo 缓存中读取查询,但已将所有信息存储在缓存中

转载 作者:搜寻专家 更新时间:2023-10-30 22:41:53 25 4
gpt4 key购买 nike

我有一个可以输入此查询的 graphql 端点:

fragment ChildParts {
id
__typename
}

fragment ParentParts {
__typename
id
children {
edges{
node {
...ChildParts
}
}
}

query {
parents {
edges
nodes {
...ParentParts
}
}
}
}

执行时返回如下内容:

"data": {
"edges": [
"node": {
"id": "<some id for parent>",
"__typename": "ParentNode",
"children": {
"edges": [
node: {
"id": "<some id for child>",
"__typename": "ChildNode"
},
...
]
}
},
...
]
}

现在,使用 apollo 客户端,在突变之后,我可以从缓存中读取此查询,并更新/添加/删除任何 ParentNode 以及任何 ChildNode,但我必须检查此查询返回的结构。

现在,我正在寻找从缓存中获取 ChildNodes 列表的可能性(因为缓存是作为平面列表创建的,所以已经有了这些),以使嵌套数据的更新更容易一些。是否有可能从缓存中读取查询,而无需之前从服务器读取相同的查询?

最佳答案

您可以使用客户端的readFragment 方法从缓存中检索任何一项。这只需要 id 和片段字符串。

const todo = client.readFragment({
id,
fragment: gql`
fragment fooFragment on Foo {
id
bar
qax
}
`,
})

请注意,id 是 dataIdFromObject 函数返回的缓存键——如果您没有指定自定义函数,则(假设 __typename 和 id 或 _id 字段存在)默认值实现只是:

${result.__typename}:${result.id || result._id}

如果您提供了自己的 dataIdFromObject 函数,则需要提供该函数返回的任何 ID。

正如@Herku 指出的那样,根据用例,还可以使用缓存重定向在解析另一个查询时利用为一个查询缓存的数据。这是作为设置 InMemoryCache 的一部分配置的:

const cache = new InMemoryCache({
cacheRedirects: {
Query: {
book: (_, args, { getCacheKey }) =>
getCacheKey({ __typename: 'Book', id: args.id })
},
},
})

不幸的是,在撰写此答案时,我认为没有任何方法可以通过 ID 删除缓存项。正在进行讨论here围绕这一点(原始问题 here )。

关于vue.js - 使用尚不存在的查询从 apollo 缓存中读取查询,但已将所有信息存储在缓存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52744328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com