Apollo乐观用户界面更新,具有不同的ID字段名

Apollo乐观用户界面更新,具有不同的ID字段名,apollo,react-apollo,Apollo,React Apollo,我正在尝试利用Apollo的乐观更新功能(在React原生应用程序中)。不幸的是,据我所知,只有当您正在更新使用名为“id”的字段作为主键的记录时,这种方法才有效。不幸的是,在许多情况下,该字段具有不同的名称。有什么方法可以让Apollo使用不同的id字段名吗?假设您使用Apollo的InMemoryCache在初始化缓存时,您可以传递一个可以返回id值的密码。始终使用id的默认值如下所示: import { InMemoryCache } from 'apollo-cache-inmemory

我正在尝试利用Apollo的乐观更新功能(在React原生应用程序中)。不幸的是,据我所知,只有当您正在更新使用名为“id”的字段作为主键的记录时,这种方法才有效。不幸的是,在许多情况下,该字段具有不同的名称。有什么方法可以让Apollo使用不同的id字段名吗?

假设您使用Apollo的
InMemoryCache
在初始化缓存时,您可以传递一个可以返回
id
值的密码。始终使用
id
的默认值如下所示:

import { InMemoryCache } from 'apollo-cache-inmemory';

const cache = new InMemoryCache({
  dataIdFromObject: o => o.id
});
要改变这一点,您可以创建一个函数来检查传入对象中的
\uuu typename
键,以根据GraphQL类型返回正确的字段

import { InMemoryCache } from 'apollo-cache-inmemory';

const cache = new InMemoryCache({
  dataIdFromObject: ({__typename, id, ...rest}) => {
    switch(__typename){
      case 'Foo': return rest.foo,
      case 'Bar': return rest.bar,
      default: return id,
    }
  }
});

假设您使用apollo的
内存缓存
,您可以在初始化缓存时传递一个可以返回
id值的密码。始终使用
id
的默认值如下所示:

import { InMemoryCache } from 'apollo-cache-inmemory';

const cache = new InMemoryCache({
  dataIdFromObject: o => o.id
});
要改变这一点,您可以创建一个函数来检查传入对象中的
\uuu typename
键,以根据GraphQL类型返回正确的字段

import { InMemoryCache } from 'apollo-cache-inmemory';

const cache = new InMemoryCache({
  dataIdFromObject: ({__typename, id, ...rest}) => {
    switch(__typename){
      case 'Foo': return rest.foo,
      case 'Bar': return rest.bar,
      default: return id,
    }
  }
});

我使用阿波罗与AWS Appsync,但这与它的缓存选项,谢谢!我使用阿波罗与AWS Appsync,但这与它的缓存选项,谢谢!