Apollo Client 3 - 如何正确实现乐观响应?

问题描述 投票:0回答:1

我有一些查询和突变,一个突变更新了相当大的实体,所以我想在触发 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
对象的响应相同。有什么重要的原因它不起作用吗?有人可以解释我该怎么做才能完成这项工作吗?

谢谢,干杯!

reactjs graphql response apollo-client
1个回答
0
投票

可能添加这个可能会解决就像引用缓存可能会更新值而不是持久化

  update: () => {
      user.refresh();
      // feel free to change the user to your stuff

    },
© www.soinside.com 2019 - 2024. All rights reserved.