0

Apollo GraphQL 团队表示 readQuery 和 writeQuery 适用于 95% 的用例。我正在使用useMutation并且update想要从缓存中删除一个项目而无需调用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 返回的内容让我认为我应该过滤 speaker.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
      }
    }
  }
`;
4

0 回答 0