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

时间:2020-02-20 02:41:45

标签: graphql apollo apollo-client

使用此突变:

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 }

})

显示突变后的更新数据。

阿波罗缓存已正确更新。但是useQuery上的数据不会更改。

1 个答案:

答案 0 :(得分:1)

问题最终是突变返回的对象不完全相同。它缺少一个@client字段。
尽管事后看来很明显,但我在哪里搜索都没有将其描述为原因,除了评论,我看到提到可能缺少__typename。 如果阿波罗抛出错误,这将是显而易见的。但是,useQuery不会抛出任何错误,也不存在。