Apollo 客户端 useQuery 在 useMutation 后不更新数据

Posted

技术标签:

【中文标题】Apollo 客户端 useQuery 在 useMutation 后不更新数据【英文标题】:Apollo client useQuery not updating data after useMutation 【发布时间】:2020-06-04 07:40:49 【问题描述】:

使用这个突变:

import produce from 'immer

const [createItem] = useMutation(CREATE_ITEM, 
update (client,  data:  createItem  ) 
  const queryResults = client.readQuery(
    query: GET_LATEST_ORDER,
    variables:  orderDepth: 1 
  )

  client.writeQuery(
    query: GET_LATEST_ORDER,
    variables:  orderDepth: 1 ,
    data: produce(queryResults, draft => 
      draft.orders[0].items.push(createItem)
    )
  )

)

我无法获得

  const  loading, data, refetch  = useQuery(GET_LATEST_ORDER, 
variables:  orderDepth: 1 

)

显示突变后的更新数据。

apollo 缓存已正确更新。但是 useQuery 上的数据没有改变。

【问题讨论】:

【参考方案1】:

问题最终是从突变返回的对象不完全相同。它缺少一个 @client 字段。 虽然事后看来很明显,但除了我看到的一条评论提到可能缺少 __typename 之外,我没有将其描述为原因。 如果阿波罗抛出错误,这将是显而易见的。但是,没有引发错误,useQuery 上也不存在错误。

【讨论】:

以上是关于Apollo 客户端 useQuery 在 useMutation 后不更新数据的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端 fetchMore 来自 useQuery 触发两个网络请求

@apollo/client 反应钩子 useQuery() 数据未定义

Apollo 客户端没有读取使用 useQuery 钩子传入的变量

如何使用 Apollo 客户端 useQuery 钩子防止不必要的重新获取?

如何从 Apollo 客户端的 useQuery 获取响应头

useQuery 返回未定义,但在 gql 操场上返回数据