所有项目的阿波罗客户端特定更新查询?
Apollo client specific updatequery for all items?
我有两个具有以下关系的模型:
Groups 有很多
链接
所以基本上我的初始查询是 getAllGroups,它获取所有组及其 link。
我有一个简单地创建 link 的突变,更新我的 UI 的最有效方法是什么?
目前我有:
export const withCreateLink = graphql(createLink, {
props({ownProps, mutate}) {
return {
createLink(url, description, group) {
return mutate({
variables: {
url,
description,
group
},
updateQueries: {
getAllGroups: (prev, {mutationResult}) => {
const newLink = mutationResult.data.createLink;
return update(prev, {
allGroups: {
links: {
$push: [newLink]
}
}
})
}
}
})
}
}
}
});
基本上我只想获取添加了 link 的组,但我需要指定是哪个组。我该怎么做?
我已经弄清楚了,在以这种方式创建其他突变时,我发现了一些不同的方法来解决这个问题:
选项 1:
如果您有权访问缓存中当前模型的索引,则可以将其作为道具传递,然后在查询中使用它来定位已添加到的模型:
updateQueries: {
getAllGroups: (prev, {mutationResult}) => {
const newLink = mutationResult.data.createLink;
return update(prev, {
allGroups: {
[groupIndex]:
links: {
$push: [newLink]
}
}
})
}
}
选项 2: 使用 update 而不是 updateQueries,因此您可以读取根查询的结果,对其进行映射,然后附加新插入的数据。之后就可以写入缓存了。
update: (proxy, mutationResult) => {
const query = getAllGroups;
const data = proxy.readQuery({query});
data.allGroups.map((groupData) => {
if(groupData.id == group)
groupData.links.push(mutationResult.data.createLink);
});
proxy.writeQuery({
query,
data
})
}
我有两个具有以下关系的模型:
Groups 有很多 链接
所以基本上我的初始查询是 getAllGroups,它获取所有组及其 link。 我有一个简单地创建 link 的突变,更新我的 UI 的最有效方法是什么?
目前我有:
export const withCreateLink = graphql(createLink, {
props({ownProps, mutate}) {
return {
createLink(url, description, group) {
return mutate({
variables: {
url,
description,
group
},
updateQueries: {
getAllGroups: (prev, {mutationResult}) => {
const newLink = mutationResult.data.createLink;
return update(prev, {
allGroups: {
links: {
$push: [newLink]
}
}
})
}
}
})
}
}
}
});
基本上我只想获取添加了 link 的组,但我需要指定是哪个组。我该怎么做?
我已经弄清楚了,在以这种方式创建其他突变时,我发现了一些不同的方法来解决这个问题:
选项 1: 如果您有权访问缓存中当前模型的索引,则可以将其作为道具传递,然后在查询中使用它来定位已添加到的模型:
updateQueries: {
getAllGroups: (prev, {mutationResult}) => {
const newLink = mutationResult.data.createLink;
return update(prev, {
allGroups: {
[groupIndex]:
links: {
$push: [newLink]
}
}
})
}
}
选项 2: 使用 update 而不是 updateQueries,因此您可以读取根查询的结果,对其进行映射,然后附加新插入的数据。之后就可以写入缓存了。
update: (proxy, mutationResult) => {
const query = getAllGroups;
const data = proxy.readQuery({query});
data.allGroups.map((groupData) => {
if(groupData.id == group)
groupData.links.push(mutationResult.data.createLink);
});
proxy.writeQuery({
query,
data
})
}