2016-12-04 8 views
4

저는 Apollo Stack과 Relay에서 매우 새롭습니다. 나는 그들 사이에서 나의 시간을 투자하려고 선택하려고 노력하고있다. 책 Learning GraphQL and Relay을 읽은 후 Apollo는 무엇을 제공해야하는지 배우기 시작했지만 지금은 인터넷에 많은 자원이 없습니다.Apollo Stack은 Relay의 노드 인터페이스와 같은 전역 객체 식별을 지원합니까?

최근에이 질문이 있지만 대답을 찾을 수 없습니다 : Relay와 같은 아폴로 지원 global object identification이 노드 인터페이스와 관련이 있습니까? 그렇지 않은 경우 글로벌 객체 식별을 지원하는 대체 솔루션이 있습니까?

답변

7

!

현재 작동하는 방식 (apollo-client 버전)은 ApolloClient 생성자가 허용하는 dataIdFromObject 함수를 사용하는 것입니다. 모든 노드가 id 필드를 가지고 그들은 모든 노드에서 고유 경우

(예 : Graphcool에서, 우리는 this library와 고유 ID를 생성) :

import ApolloClient from 'apollo-client'; 

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

당신의 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에서 가져옵니다.