具有不同ID字段名称的Apollo Optimistic UI更新

时间:2018-12-02 15:39:19

标签: apollo react-apollo

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

1 个答案:

答案 0 :(得分:2)

假设您使用阿波罗的InMemoryCache,则可以通过dataIdFromObject来初始化缓存时返回id的值。始终使用id的默认值看起来像这样:

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

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

要更改此设置,您可以创建一个函数来检查传入对象中的.__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,
    }
  }
});