Reactjs Apollo客户端/GraphQL实时更新UI

Reactjs Apollo客户端/GraphQL实时更新UI,reactjs,graphql,apollo,react-apollo,apollo-client,Reactjs,Graphql,Apollo,React Apollo,Apollo Client,我有一个表单,我试图在其中创建一个用户体验,当您创建一个新记录时,它将为它创建一个id并实时写入数据库,并在UI中反映这些更改。 或 您正在编辑一条记录,它已经被赋予了一个id,因此它知道如何更新该记录 我有一个突变,处理了两个病例: 没有传递给突变的ID,因此它创建了一个新的 它传递了一个ID,因此它会更新该对象 组件正在使用compose包装2个案例的变异,以及对该对象的查询。 我尝试附加一个fetchPolicy:“缓存和网络”,但这不起作用 预期结果: 试图取回组件操作中生成的id 实际

我有一个表单,我试图在其中创建一个用户体验,当您创建一个新记录时,它将为它创建一个id并实时写入数据库,并在UI中反映这些更改。 或 您正在编辑一条记录,它已经被赋予了一个id,因此它知道如何更新该记录

我有一个突变,处理了两个病例:

没有传递给突变的ID,因此它创建了一个新的

它传递了一个ID,因此它会更新该对象

组件正在使用compose包装2个案例的变异,以及对该对象的查询。 我尝试附加一个fetchPolicy:“缓存和网络”,但这不起作用

预期结果: 试图取回组件操作中生成的id

实际结果: 重新呈现组件时ID显示为null,仅在页面刷新时更新

如何重现该问题: 我有一个变异,如果没有传递前一个id,它会为一个对象创建一个新id。
或者,如果它传递了一个id,那么它将更新该对象。

TLDR您需要手动将新创建的对象添加到apollo存储中,以便更新ui

我在没有看到任何代码的情况下给出的答案是:当您运行变异时,Apollo客户端将自动更新存储区中与变异返回的对象id相匹配的任何内容以及返回的字段。如果您正在创建一个新对象,Apollo将无法在您的存储中找到匹配的对象进行更新,因此它不会自动发生

从文件中--

在某些情况下,仅使用dataIdFromObject不足以满足您的需要 要正确更新应用程序UI。例如,如果要在不重新绘制整个列表的情况下向对象列表中添加某些内容,或者如果存在无法为其分配对象标识符的对象,Apollo Client将无法为您更新现有查询

您需要手动将新创建的对象添加到存储中。幸运的是,有一些API可用于此目的。你要找的就是这个选项


与此同时进行,将为您提供所需的体验。如果您可以显示组件的代码(甚至可能是带有突变的HOC),则可以找到optimisticUI的示例,这将有助于诊断此问题。