2016-09-13 4 views
0

릴레이 컨테이너를 사용하지 않습니다. 구성 요소를보다 잘 제어하고 싶기 때문입니다. 대신에 나는 HOC + Relay.Store.forceFetch을 사용하는데, 주어진 쿼리를 변수로 가져옵니다. 그래서 나는 다음과 같은 쿼리를 가지고 : 릴레이 돌연변이 조각 교차점

query { 
    root { 
     search(filter: $filter) { 
     selectors { 
      _id, 
      data { 
      title, 
      status 
      } 
     }, 
     selectorGroups { 
      _id, 
      data { 
      title, 
      } 
     } 
     } 
    } 
} 

가 그럼 난 selector 유형에 약간의 변이를해야한다. 구성 요소의

export default class ChangeStatusMutation extends Relay.Mutation { 
    getMutation() { 
    return Relay.QL`mutation {selectors_status_mutation}`; 
    } 
    getVariables() { 
    return { 
     id: this.props.id, 
     status: this.props.status 
    }; 
    } 
    getFatQuery() { 
    return Relay.QL` 
     fragment on selectors_status_mutationPayload{ 
     result { 
      data { 
      status 
      } 
     } 
     } 
    `; 
    } 
    static fragments = { 
    result:() => Relay.QL` 
     fragment on selector { 
     _id, 
     data { 
      title, 
      status 
     } 
     }`, 
    }; 

    getOptimisticResponse() { 
    return { 
     result: { 
     _id: this.props.id, 
     data: { 
      status: this.props.status 
     } 
     } 
    }; 
    } 

    getConfigs() { 
    return [{ 
     type: 'FIELDS_CHANGE', 
     fieldIDs: { 
     result: this.props.id 
     }, 
    }]; 
    } 
} 

전화 돌연변이 :

릴레이 스토리지 돌연변이 약속 선택이 변경되지 않습니다
const mutation = new ChangeStatusMutation({id, status, result: selector}); 
Relay.Store.commitUpdate(mutation); 

후.

ChangeStatusMutation($input_0:selectors_statusInput!) { 
    selectors_status_mutation(input:$input_0) { 
    clientMutationId 
    } 
} 

그러나 수정 선택은 이미 릴레이로 가져되었고, 나는 소품 돌연변이에 전달 : 그 어떤 분야하지 않고 있기 때문에 Tracked Fragment Query 빈 돌연변이 수행의 같아요. 따라서 Relay는 유형을 변경하고 변경해야 할 항목을 찾고 교체해야하는 필드를 알고 있습니다. 그러나 교차 할 수는 없습니다. 뭐가 문제 야?

답변

1

그래서,

릴레이로 표시된 노드를 찾는하여 쿼리 교차로를 수행 ... 당신은 확실히 여기 릴레이 컨테이너를 피함으로써 "목장 오프"조금,하지만 나는이 여전히 작동해야한다고 생각하여 FIELDS_CHANGE config. 이 경우 fieldIDs은 ID가 this.props.idresult 노드를 가리키고 있습니다.

상점에 해당 ID를 가진 노드가 있습니까? 귀하의 forceFetch 검색어에서 대체 문자 _id을 가져 왔지만 실제로는 id을 가져 오지 않는 것으로 나타났습니다. 계전기에서 나중에 id 입력란을 사용하여 나중에 다시 가져 오거나 선언적 돌연변이 API를 사용할 수 있습니다.

내가 보내려는 검색어를 확인하여 시작하여이 result 유형을 가져 오는 것으로 시작합니다. 나는 당신이 당신의 질문 서술 어디서나 그것을 가져 오는 것을 보지 않습니다, 그래서 저는 아마도 당신이 지금 당장 그것을 가져 오지 않을 것이라고 가정하고 있습니까?

+0

나는 많은 릴레이 예제에서 ID 필드를 발견했으나 본 적이 없다는 것을 알았습니다. (나는 시도해 볼 것입니다. –

+0

'result' 필드에 관해서는 똑같은 방식으로 정확히 요청되지 않았으므로, 그러나'result'의 타입은'selector'이고 선택자는 첫 번째 큰 쿼리'selectors {...'에서 요구되었습니다. 그래서 올바른 교차점에 대해 필드 이름이 정확히 같아야합니까? 타입을 기반으로하기 때문에 실제로 교차 할 수 있습니다 –

+0

교차 부분은 필드 이름이 아닌 ID를 기반으로하므로 필드 ID를 제공하고 (필드 ID에 유효한 기존 ID를 제공해야합니다) – NevilleS