2016-12-13 2 views
2

La requête de mutation envoyée à GraphQL n'inclut pas le résultat de l'intersection entre la requête de piste et ma requête de graisse.Le fragment Fat Query non inclus dans la requête envoyée à GraphQL

C'est ma classe de mutation:

getMutation() { 
    return Relay.QL`mutation { updateTag }` 
} 

getVariables() { 
    return { 
    id: this.props.id, 
    name: this.props.name, 
    isFollowed: this.props.isFollowed, 
    } 
} 

getFatQuery() { 
    return Relay.QL` 
    fragment on UpdateTagPayload { 
     viewer { 
     followedTags { 
      tagList { 
      name 
      } 
     } 
     } 
    } 
    `; 
} 

getConfigs() { 
    return [ 
    { 
     type: 'FIELDS_CHANGE', 
     fieldIDs: { 
     viewer: this.props.viewerID, 
     }, 
    }, 
    ] 
} 

Et ceci est la requête résultante, envoyée à GraphQL:

mutation FollowTagMutation($input_0:UpdateTagInput!) { 
    updateTag(input:$input_0) { 
    clientMutationId 
    } 
} 

J'attends une partie des champs définis dans mon Fat requête pour être aussi Là.

Dans la console, les variables Fragment sur chenilles est un objet vide (Object{}), et le sur chenilles Fragment Query est juste vide.

Ainsi, il semble que, lorsque la piste et la requête fat sont interceptées, le résultat est une requête Intersection vide.

Toute aide sur * ceci? Qu'est-ce que j'oublie ici?

Répondre

1

Alors , la solution à mon problème est t wo plié:

  1. Utilisez this.props.relay.commitUpdate, au lieu de Relay.Store.commitUpdate:

    À ce stade, je ne sais pas vraiment pourquoi (ne peut pas trouver de la documentation à ce sujet), mais en utilisant ce dernier juste n » ai pas Je travaille dans mon cas. Une fois que je découvre, je vais mettre ce point à jour. Connectez le viewer dans mon Fat Query au viewer dans le magasin de relais local.

    Ceci est lié aux suggestions fournies par les autres réponses ici (merci @maplechori et @Ahmad Ferdous!).

    Cependant, il n'est pas nécessaire de créer le bit static fragments dans la classe Mutation; Je m'assure juste d'aller chercher viewer { id } via Relay dans le composant React, et de le passer à la Mutation via props, donc il est utilisé dans le bit getConfigs().

+0

Pourriez-vous poster le code qui a fonctionné? Je ne comprends pas vraiment ce que vous entendez par 'Connectez la visionneuse dans ma requête de graisse à la visionneuse dans mon magasin de relais local'. – superquest

0

Je suggère de définir le fragment sur le FollowTagMutation, puis le tirer avec $ {FollowTagMutation.getFragment ('viewer')} sur le composant appelant cette mutation.

alors assurez-vous de passer le spectateur sur Relay.Store.commitUpdate (nouveau FollowTagMutation (spectateur: this.props.viewer ..... sur ce même composant

+1

OK, donc je mis en place le composant React qui appelle la 'FollowTagMutation' inclure les' $ {FollowTagMutation.getFragment ('viewer')} 'de la part Relay.QL. Et je fais 'Relay.Store.commitUpdate (new FollowTagMutation ({..., viewer: this.props.viewer})); ' Mais sur la classe de mutation, dans' getConfigs() ',' this.props.viewer' vient 'undefined'. –

+0

En outre, j'obtiens cette erreur sur la console quand je déclenche la mutation: ** RelayMutation: Prop attendu 'viewer' fourni à' FollowTagMutation' pour être récupéré par Relay. ** –

0

(Ceci est approprié pour un commentaire.. Je mets ici pour maintenir le code de mise en forme)

sur la base de vos informations, je soupçonne que vous devez faire viewer ID disponible pour obtenir le résultat escompté Ajouter fragments-FollowTagMutation mutation:..

static fragments = { 
    viewer:() => Relay.QL` 
     fragment on Viewer { 
     id, 
     } 
    `, 
    }; 
+0

Ceci semble être lié à @ maplechori's répondre. Merci! –