Если вы используете 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,
}
}
});