2015-11-18 8 views
13

Ich habe zwei Relay-Mutationen, die ich schachteln zuerst ein Objekt hinzufügen und dann seinen Namen festlegen. Ich glaube, was ich an die zweite Mutation weitergebe, sind in der Tat Daten, die von Relay geholt wurden, aber es scheint mir nicht zuzustimmen. Der Code in der Ansicht Reaktion ist wie folgt:Relay-Mutation erwartet Daten abgerufen von Relay

Relay.Store.update(
     new AddCampaignFeatureLabelMutation({ 
      campaign: this.props.campaign 
     }), 
     { 
      onSuccess: (data) => { 
       Relay.Store.update(
        new FeatureLabelNameMutation({ 
         featureLabel: data.addCampaignFeatureLabel.featureLabelEdge.node, 
         name: this.addLabelInputField.value 
        }) 
       ); 
      }, 
      onFailure:() => {} 
     } 
    ); 

Dies funktioniert, aber gibt mir eine Warnung:

Warning: RelayMutation: Expected prop `featureLabel` supplied to `FeatureLabelNameMutation` to be data fetched by Relay. This is likely an error unless you are purposely passing in mock data that conforms to the shape of this mutation's fragment. 

Warum Relay denke, die Daten nicht abgerufen wird? Muss ich das neue featureLabel vielleicht irgendwie in die Payload zurückgeben?

Antwort

41

ich in das gleiche Problem lief und es dauerte einige Zeit, um herauszufinden, was los war, so könnte dies anderen helfen:

Da die Warnung sagt , müssen Sie der Mutation, die von Relay abgerufen wurde, eine Entität bereitstellen. ABER was die Warnung nicht sagt, ist, dass es mit der Mutation im Kopf geholt werden muss.

Also im Grunde muss man die Mutation fügen Sie es in der Zukunft in der anfänglichen Abfrage wie folgt auszuführen gehen:

  fragment on Person { 
      firstname, 
      lastname, 
      language, 
      ${UpdatePersonMutation.getFragment('person')} 
      } 

Dadurch werden die notwendigen Teile für das Unternehmen in den Laden hinzuzufügen, die sind benötigt durch die Mutation.

In Ihrem Fall, was Sie tun müssen, ist die FeatureLabelNameMutationgetFragment zu Ihrer AddCampaignFeatureLabelMutation Abfrage hinzufügen. Dies bringt Ihre featureLabel Einheit mit den notwendigen Informationen für die FeatureLabelNameMutation, ohne Warnung zu folgen.

Die Relais-Dokumentation ist sehr schlecht in diesem und vielen anderen Bereichen.

+0

Etwas spät von einer Antwort hier, aber das habe ich auch herausgefunden. Ich bin damit einverstanden, dass die Dokumentation fehlerhaft ist. Ich bin einfach zur Quelle gegangen, um diese herauszufinden. – logos

+0

@Christine, ich habe ein sehr ähnliches Problem. Einen Blick auf meine [Frage] werfen (http://stackoverflow.com/q/35197523/2030321)? Ich wäre ewig dankbar! – Chris

+0

Verdammt, ich vergesse immer die Fragmente mit eingerechnet, und kratze mich am Kopf ... hätte das jetzt nicht schon durch die bloße Anzahl von Malen gelernt, die ich diesen Fehler gemacht habe. Nicht dass die Fehlermeldung viel hilft .... –

7

Relay erwartet, dass alle Fragmente für Ihre Mutation von Ihrer props stammen. Da Sie data aus Ihrem Callback und nicht etwas aus Ihrem Container Reels verwenden, löst Relay diese Warnung.

an der Quelle Werfen Sie einen Blick: https://github.com/facebook/relay/blob/master/src/mutation/RelayMutation.js#L289-L307

+0

Perfekt, danke! – logos

+0

Also, dies ist nur eine Warnung und wird kein Problem bei der Verwendung der Daten verursachen? –

+0

@javvvva Nein, siehe die Antwort unten. Die Warnung hebt tatsächlich ein echtes Fehlverhalten hervor, erklärt es aber nicht sehr gut. – Christine