如何使用readQuery和writeQuery从Apollo GraphQL客户端删除缓存记录


Apollo GraphQL团队表示,readQuery和writeQuery适用于95%的用例。我正在使用useMutationupdate,并且希望在不必调用refetchQueries的情况下从缓存中删除项目。我的代码如下:
const [deleteSpeaker] = useMutation(DELETE_SPEAKER, {
update(cache, { data: {deleteSpeaker}}) {
const { speakers} = cache.readQuery({query: GET_SPEAKERS});
cache.writeQuery({
query: GET_SPEAKERS,
data: { speakers: speakers.filter(speaker => speaker.id !== deleteSpeaker.id) }
});
},
});

从readQuery返回的内容让我认为我应该过滤speakers.datalist,但当我这样做时,缓存不会更新。

更新缓存以反映从GET_SPEAKERS查询中删除的记录的正确方法是什么。

export const DELETE_SPEAKER = gql`
mutation DeleteSpeaker($speakerId: Int!) {
deleteSpeaker(speakerId: $speakerId) {
id
first
last
favorite
}
}
`;

和GET_SPEAKERS

export const GET_SPEAKERS = gql`
query {
speakers {
datalist {
id
first
last
favorite
company
}
}
}
`;

阅读apollo文档,这应该是lke:

const [deleteSpeaker] = useMutation(DELETE_SPEAKER, {
update(cache, { data: {deleteSpeaker}}) {
cache.modify({
id: cache.identify(deleteSpeaker.id),
fields: {
comments(existingSpeakerRefs, { readField }) {
return existingSpeakerRefs.filter(
speaker => deleteSpeaker.id !== readField('id', speakerRef)
);
},
},
});
},
});

最新更新