2016-12-04 1 views
4

Я очень новичок в стеке и реле Apollo. Я пытаюсь выбрать между ними, чтобы инвестировать свое время. После окончания чтения книги Learning GraphQL and Relay, я обратился к Аполлону, чтобы узнать, что он может предложить, но прямо сейчас в Интернете не так много ресурсов.Поддерживает ли Apollo Stack глобальную идентификацию объекта, например, интерфейс узла Relay?

У меня вопрос недавно, но не удалось найти ответ: поддерживает ли Apollo global object identification, как Relay делает с интерфейсом узла? если нет, есть ли у него альтернативное решение для поддержки идентификации глобальных объектов?

ответ

7

Да!

Способ, которым он в настоящее время работает (версия 0.5 от apollo-client) есть с функцией dataIdFromObject, которую принимает конструктор ApolloClient.

Если все узлы получили id поля, и они являются уникальными во всех узлах (в Graphcool, например, мы создаем уникальные идентификаторы с this library):

import ApolloClient from 'apollo-client'; 

const client = new ApolloClient({ 
    dataIdFromObject: o => o.id 
}); 

Вы должны убедиться, чтобы включить id поля каждый запрос, который вы хотите нормализовать.

Если ваши идентификаторы уникальны только для каждого типа, вы можете комбинировать их с __typename для создания уникальных идентификаторов:

const client = new ApolloClient({ 
    dataIdFromObject: (result) => { 
    if (result.id && result.__typename) { 
     return result.__typename + result.id; 
    } 

    // Make sure to return null if this object doesn't have an ID 
    return null; 
    }, 
}); 

Код взят из official Apollo documentation.

Смежные вопросы