Обновление Apollo Optimistic UI с другим именем поля идентификатора - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь использовать оптимистическую функциональность обновления Apollo, описанную в https://www.apollographql.com/docs/react/features/optimistic-ui.html (в приложении React-Native).К сожалению, насколько я могу судить, это работает, только если вы обновляете записи, которые используют поле с именем "id" в качестве своего первичного ключа.К сожалению, у меня есть много случаев, когда это поле имеет другое имя.Можно ли как-то сказать Apollo работать с другим именем поля id?

1 Ответ

0 голосов
/ 03 декабря 2018

Если вы используете InMemoryCache в apollo, вы можете передать 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,
    }
  }
});
...