我有一些查询和突变,一个突变更新了相当大的实体,所以我想在触发 mutate 函数后添加
optimistic response
。问题是,即使我传递给 optimisticResponse
对象,当突变完成作业时也会返回完整数据,它不会将其添加到缓存中 - 似乎自从有了 optimistic response
后,当突变响应准备就绪时,数据就会刷新或者更新 UI 的时间不一样,所以我认为 optimistic response
不起作用。
我有一些代码示例:
突变:
mutation UpdateList($id: ID, $data: ListData) {
updateList(id: $id, data: $data) {
list_id // 1
name
}
}
行动
const [action] = useMutation(mutation_from_above)
// async body function so await can be used
await action({ variables: { id: 1, data: { name: 'secret name' }}, optimisticResponse: {
updateList: {
__typename: 'List',
list_id: 1,
name: 'some updated name until data is back'
}
})
当然,我已经在缓存配置中更新了 typename 的 id 字段,如下所示:
cache: new InMemoryCache({
typePolicies: {
List: {
keyFields: ['list_id'],
},
},
}),
它看起来很简单,但对我来说不起作用。我还检查了 API 端,突变的响应与我传递给
optimisticResponse
对象的响应相同。有什么重要的原因它不起作用吗?有人可以解释我该怎么做才能完成这项工作吗?
谢谢,干杯!
可能添加这个可能会解决就像引用缓存可能会更新值而不是持久化
update: () => {
user.refresh();
// feel free to change the user to your stuff
},