使用 Apollo-Client 重新获取查询会引发错误

Posted

技术标签:

【中文标题】使用 Apollo-Client 重新获取查询会引发错误【英文标题】:Refetching a query using Apollo-Client throws an error 【发布时间】:2021-10-06 11:07:31 【问题描述】:

我正在使用 Apollo-client 将突变发布到我的 graphql 服务器。突变完成后,我想重新获取该数据。我尝试在useMutation 挂钩中使用refetchQueries 参数,但是在执行代码时收到此错误:

查询选项是必需的。您必须在中指定您的 GraphQL 文档 查询选项。

这是发送突变的代码行:

const [addUser,  data, loading, error ] =
    useMutation(ADD_USER_QUERY, 
        refetchQueries:[GET_USERS_QUERY]
    );

这是我的查询(硬编码参数是为了查看问题是否是由于传递变量):

export const ADD_USER_QUERY = gql`
    mutation 
        createUser(name: "Albert Einstein", email: "albert@yahoo.ca") 
            id
            name
        
    
`;

谢谢!

【问题讨论】:

【参考方案1】:

好的,所以我弄清楚了问题所在。我必须在refetchQueries 数组中传递一个带有"query" 键的对象:

const [addUser,  data, loading, error ] =
    useMutation(ADD_USER_QUERY, 
        refetchQueries: [ query: GET_USERS_QUERY ],
    );

这很奇怪,因为 ApolloDocs 中没有提到它。他们只是使用一个数组...

// Refetches two queries after mutation completes
const [addTodo,  data, loading, error ] = useMutation(ADD_TODO, 

  refetchQueries: [
    GET_POST, // DocumentNode object parsed with gql
    'GetComments' // Query name
  ],
);

有人知道这是为什么吗?

谢谢!

【讨论】:

查询名称!= 查询常量(名称+正文) 这也吸引了我。但它说要在 API 参考中使用 query 来进行 useMutation 虽然 apollographql.com/docs/react/data/mutations/#refetchqueries

以上是关于使用 Apollo-Client 重新获取查询会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 apollo-client 跳过部分查询

angular, apollo-client, graphQL - 从 graphql 查询中选择所有字段

如何与另一个查询共享缓存的 apollo-client 数据

你如何动态控制 react apollo-client 查询启动?

为啥 apollo-client 的 GraphQL 查询不出现在 Chrome 的 XHR 网络过滤器中?

在 Apollo-client 中,writeQuery 会更新缓存,但 UI 组件不会重新渲染