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 钩子防止不必要的重新获取?