2016-07-06 2 views
0

중첩 된 연결에서 중계 변경을 쓰는 데 문제가 있습니다. 나는 모두 상위 요소와 parentID는 "뷰어"를 가리키는이, 그러나 connectionName에 "이벤트"는 "개체"유형에 존재하는 뷰어에 존재하지 않는 가지고있는 getConfigs에서중첩 연결을 위해 getConfigs에서 parentName, parentId 및 connectionName을 어떻게 정의합니까?

{ 
    viewer { 
    entity(id) { 
     events // mutate connection here 
    } 
    } 
} 

: 여기 유형 구조는 .

아래의 코드 조각에서 볼 수 있듯이 getFatQuery에서 변수를 사용하여 엔티티 ID로 변형 된 데이터를 가져 오는 방법을 잘 모르겠습니다.

getConfigs 및 getFatQuery :

 getConfigs() { 
     return [{ 
      type: 'RANGE_ADD', 
      parentName: 'viewer', 
      parentID: this.props.viewer.id, 
      connectionName: 'events', 
      edgeName: 'eventEdge', 
      rangeBehaviors: { 
      '': 'append' 
      }, 
     }]; 
     } 

     getFatQuery() { 
     return Relay.QL` 
      fragment on addEventPayload { 
      viewer { 
       entity(id: $entityId) // how do I use variables in the getFatQuery { 
       events(first: 20) { 
        edges { 
        node { 
         status 
        } 
        } 
       } 
       } 
      }, 
      eventEdge 
      } 
     `; 
     } 

나는 그것이 아무 의미가 그래서 내 질문에 대해 질문을 주시기주세요 취하면 내 질문에 명확히 도움이 될 수 있다면 기쁘겠습니다.

도움 주셔서 감사합니다.

답변

3

미래에는 아무도이 ID를 전달하지 않거나 중첩 된 쿼리/필드를 처리하는 것에 대해 걱정할 필요가 없습니다. Relay는 클라이언트에서 적절한 레코드를 찾고 업데이트합니다. This issue on Github이 freiksenet의 의견을 이해하는 데 도움이되었습니다.

위의 예에서 - viewer을 거치지 않고 바로 entity으로 바로 이동합니다.

outputFields :

outputFields: { 
    eventEdge: { 
     type: eventEdge, 
     resolve: async({event}) => { 
     const eventsByOwner = await Event.getEventsByOwnerId(event.ownerId) 
     const eventIndex = eventsByOwner.findIndex(evt => evt.id == event.id); 
     const cursor = offsetToCursor(eventIndex); 
     return { 
      cursor: cursor, 
      node: event 
     }; 
     } 
    }, 
    entity: { 
     type: entity, 
     resolve: async({event}) => { 
     return Entity.getEntity(event.ownerId) 
     } 
    }, 
    } 

getConfigs 및 getFatQuery :

getConfigs() { 
    return [{ 
     type: 'RANGE_ADD', 
     parentName: 'entity', 
     parentID: this.props.entityId, 
     connectionName: 'events', 
     edgeName: 'eventEdge', 
     rangeBehaviors: { 
     '': 'append' 
     }, 
    }]; 
    } 

    getFatQuery() { 
    return Relay.QL` 
     fragment on addEventPayload @relay(pattern: true) { 
     entity { 
      events 
     }, 
     eventEdge 
     } 
    `; 
    } 

참고 : 연결 쿼리에 인수를 전달하지 않는 경우에 당신이 문제로 실행하지 않도록 할 것 @relay(pattern: true)를 사용하고 이 유형의 마지막 쿼리로 돌아갑니다.