首页 > 解决方案 > 在 Apollo GraphQL 客户端中突变成功后重新获取查询

问题描述

如果我有两个功能,第一个是获取文档,第二个是删除文档。我只想在删除文档成功后更新缓存

功能如下。

const [loadDocuments] = useLazyQuery(GET_PRODUCTS, {
  onCompleted({ getProducts: data }) {
     setRows(data)
  },
  variables: getVariables(),
})

const [loadDelete] = useMutation(REMOVE_PRODUCTS, {
  update(cache, data) {
    // ...
  },
  variables: { ids: selected.join(',') },
})

我试过了。

1. 变异成功后调用loadDocuments()。

const [loadDelete] = useMutation(REMOVE_PRODUCTS, {
  update(cache, data) {
     loadDocuments()
  },
})

===>loadDocuments没有被解雇。我不知道为什么,它没有被解雇。

2.添加refetchQueries删除Mutation

const [loadDelete] = useMutation(REMOVE_PRODUCTS, {
  update(cache, data) {
    // ...
  },
  variables: { ids: selected.join(',') },
  refetchQueries: () => [
    {
      query: GET_PRODUCTS,
      variables: getVariables(),
    },
  ],
})

===> 它触发查询GET_PRODUCTS,也许服务器响应一些东西。但我不知道在哪里捕捉它来更新状态。


我阅读了一些在突变后更新缓存的文章。他们使用readQuerywriteQuery。但就我而言,我想要更简单的方法。如果有表格,表格应该每页显示 20 行。然后,如果我删除 2 行,并删除 2 行的缓存数据,则只剩下 18 项。

无论如何,我必须再拿 2 件物品。所以我认为即使我使用readQueryand writeQuery,我也应该再次获取 2 行。所以我只想获取一次最新数据。然后感觉更简单了。在这种情况下,最佳实践是什么,有没有办法让它变得简单?

标签: graphqlapollo-client

解决方案


推荐阅读