所有项目的Apollo客户端特定的更新查询?
问题描述:
我有两个型号,存在以下关系:所有项目的Apollo客户端特定的更新查询?
组有许多 链接
所以基本上我的初始查询是getAllGroups,其中取各组及其链接。 我有一个简单的创建链接的突变,什么是最有效的方式来更新我的用户界面?
目前我有:
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]
}
}
})
}
}
})
}
}
}
});
基本上我只希望获取其中有添加到它的链接群,但我需要指定哪个组是。我如何去做这件事?
答
我已经想通了,同时创造其他突变这样,我已经找到了解决这一一些不同的方法:
选项1: 如果你有机会到目前的模式,是在指数缓存,你可以把它作为一个道具,然后用它查询的内部目标,它已被添加到一个:
updateQueries: {
getAllGroups: (prev, {mutationResult}) => {
const newLink = mutationResult.data.createLink;
return update(prev, {
allGroups: {
[groupIndex]:
links: {
$push: [newLink]
}
}
})
}
}
选项2:使用更新,而不是updateQueries,这样你就可以读取t的结果他根查询,映射它,然后追加新插入的数据。在此之后,您可以将其写入缓存。
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
})
}
那么你想添加一个链接到特定的组?因为现在你给所有组添加新的链接 –
是的,但我想我已经知道了。我可以从我的道具中收到组索引,然后在我的查询中使用该索引:allGroups:{[groupIndex]:{links:{...}}}。对?我会补充说,作为答案。谢谢你的评论。 –
是看起来像正确的方式 –