Apollo 客户端 useQuery 在 useMutation 后不更新数据
Apollo client useQuery not updating data after useMutation
使用这个突变:
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上的数据没有变化。
问题最终是突变返回的对象不完全相同。它缺少一个@client 字段。
虽然事后看来很明显,但我搜索的任何地方都没有将此描述为一个原因,除了我看到的一条评论提到可能缺少 __typename。
如果阿波罗抛出错误,这将是显而易见的。但是,没有抛出任何错误,useQuery 也不存在。
使用这个突变:
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上的数据没有变化。
问题最终是突变返回的对象不完全相同。它缺少一个@client 字段。
虽然事后看来很明显,但我搜索的任何地方都没有将此描述为一个原因,除了我看到的一条评论提到可能缺少 __typename。
如果阿波罗抛出错误,这将是显而易见的。但是,没有抛出任何错误,useQuery 也不存在。