릴레이 컨테이너를 사용하지 않습니다. 구성 요소를보다 잘 제어하고 싶기 때문입니다. 대신에 나는 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는 유형을 변경하고 변경해야 할 항목을 찾고 교체해야하는 필드를 알고 있습니다. 그러나 교차 할 수는 없습니다. 뭐가 문제 야?
나는 많은 릴레이 예제에서 ID 필드를 발견했으나 본 적이 없다는 것을 알았습니다. (나는 시도해 볼 것입니다. –
'result' 필드에 관해서는 똑같은 방식으로 정확히 요청되지 않았으므로, 그러나'result'의 타입은'selector'이고 선택자는 첫 번째 큰 쿼리'selectors {...'에서 요구되었습니다. 그래서 올바른 교차점에 대해 필드 이름이 정확히 같아야합니까? 타입을 기반으로하기 때문에 실제로 교차 할 수 있습니다 –
교차 부분은 필드 이름이 아닌 ID를 기반으로하므로 필드 ID를 제공하고 (필드 ID에 유효한 기존 ID를 제공해야합니다) – NevilleS