Apollo Optimistic UI 使用不同的 ID 字段名称进行更新

Apollo Optimistic UI update with different ID field name

我正在尝试使用 https://www.apollographql.com/docs/react/features/optimistic-ui.html 中描述的 Apollo 的乐观更新功能(在 React-Native 应用程序中)。不幸的是,据我所知,这仅在您更新使用名为 "id" 的字段作为主键的记录时才有效。不幸的是,我有很多情况下该字段具有不同的名称。有什么方法可以告诉 Apollo 使用不同的 id 字段名称吗?

假设您使用 apollo 的 InMemoryCache,您可以在初始化缓存时传递 dataIdFromObject,它可以 return 一个 id 的值。默认情况下,始终使用 id 看起来像这样:

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

const cache = new InMemoryCache({
  dataIdFromObject: o => o.id
});

要更改此设置,您可以创建一个函数,根据 GraphQL 类型检查传入对象中的 .__typename 键是否为 return 正确的字段;

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,
    }
  }
});