2017-08-21 2 views
2

Ich baue eine App als meinen ersten echten Ausflug in React, Relay und GraphQL, mit Relay Modern.Relais-Container ohne Daten

Der grundlegende Fall ist, ich habe eine Login-Formular-Komponente, die wirklich keine Daten benötigt; das heißt, die Komponente rendert eine Form und hat eine entsprechende Mutation, muss aber nichts abfragen.

Es scheint, dass ein Relais Stil Abfragefragment bietet eine Notwendigkeit ist, wenn createFragmentContainer Aufruf, was wiederum sorgt dafür, dass die this.props.relay nicht null im Rahmen der Komponente sein.

Momentan verwende ich eine React-Standardkomponente (Nicht-Relay) für das Anmeldeformular, kann aber nicht auf die Relay-Umgebung zugreifen, um sie an die Mutation weiterzuleiten.

Meine Frage - gibt es eine Möglichkeit, ein "leeres" Relay-Fragment im Wesentlichen zu übergeben? Oder gibt es eine bessere Sprache, die in diesem Fall empfohlen wird?

Antwort

2

Sie verwenden nur eine normale Komponente und erstellen dann eine Mutationsdatei mit der darin enthaltenen Mutation. Führen Sie den Relay-Compiler aus, um das graphql-Fragment für die Mutation zu erstellen, und rufen Sie dann die Mutation im Formular submit auf. Die Mutation braucht deine Umgebung. Hier ist das Relais moderne docs:

https://facebook.github.io/relay/docs/mutations.html

Sie müssen das Ergebnis der Mutation irgendwo speichern und dann die Auth-Token an Ihre nächsten Anfragen hängen, aber das sollte nicht allzu schwer zu tun. Just onCompleted und speichern Sie das Ergebnis irgendwo.

Ihre Umgebung sollte eine separate Datei sein, die Sie für Mutationen und Abfrage-Renderings importieren. Nur paginationContainer erbt Umgebung von einem QueryRenderer.

+0

Die meisten davon habe ich schon in der Hand. Meine Mutation ist in einer eigenen Datei und funktioniert gut. Wirklich das einzige Problem ist, wie man die "Umgebung" im Kontext einer Nicht-Relay-Komponente erhält, was so klingt, als ob du mir einen Hinweis gegeben hättest. Ich werde diese – metahamza

+0

Yeah-Umgebung erkunden, die Sie manuell einrichten, dann verwenden Sie es in QueryRender oder Mutationen. In diesem Fall importieren Sie einfach Ihre vorhandene Umgebung und verwenden Sie sie erneut. So habe ich es gemacht: https://github.com/aljones15/RelayMapToDo/blob/master/src/ToDoList/CreateToDoMutation.jsx – liminal18

+0

Danke, das hat funktioniert! – metahamza