我有一个在创建或更新时触发的 upsert 查询。在更新时,Apollo 将结果集成到缓存中,但在创建时不会。
这是查询:
export const UPSERT_NOTE_MUTATION = gql`
mutation upsertNote($id: ID, $body: String) {
upsertNote(id: $id, body: $body) {
id
body
}
}`
我的客户:
const graphqlClient = new ApolloClient({
networkInterface,
reduxRootSelector: 'apiStore',
dataIdFromObject: ({ id }) => id
});
来自服务器的响应是相同的:两者id
都body
返回,但 Apollo 不会自动将新 id 添加到data
缓存对象中。
是否可以让 Apollo 自动添加新对象data
而不触发后续提取?
这是我的数据存储的样子:
更新
根据文档,该功能updateQueries
应该允许我将新元素推送到我的资产列表中,而无需再次触发我的原始获取查询。
该函数被执行,但该函数返回的任何内容都被完全忽略并且缓存没有被修改。
即使我做这样的事情:
updateQueries: {
getUserAssets: (previousQueryResult, { mutationResult }) => {
return {};
}
}
没有什么变化。
更新#2
仍然无法更新我的资产列表。
在里面updateQueries
,这是我的previousQueryResult
样子:
updateQueries: {
getUserAssets: (previousQueryResult, { mutationResult }) => {
return {
assets: []
.concat(mutationResult.data.upsertAsset)
.concat(previousQueryResult.assets)
}
}
}
但无论我返回什么,数据存储都不会刷新:
作为参考,以下是每个的asset
样子: