2016-10-10 2 views
1

Ich möchte Namensraum/Nest Query-Variablen wie folgt aus:Ist es möglich, verschachtelte/Namespace-Abfragevariablen in einer GraphQL-Abfrage zu verwenden?

query ($params: {$id: ID!}) { 
    getUser(id: $params.id) { 
    email 
    username 
    } 
} 

mit den Variablen:

{ 
    "params": { 
    "id": "42" 
    } 
} 

aber es ist keine gültige Abfrage.

jedoch eine Abfrage wie:

query ($id: ID!) { 
    getUser(id: $id) { 
    email 
    username 
    } 
} 

mit den Variablen:

{ 
    "id": "42" 
} 

wird gut funktionieren.

Der Grund, warum ich mag, dass von Router reagiert auf die gewickelte Komponente angelegt wird, von dieser zu tun ist, um automatisch in query options in die graphql höhere Ordnung Komponente mit der Stütze params ApolloReact zu senden. Diese Frage hat im Wesentlichen nichts mit Reverse-Router zu tun, abgesehen von der Tatsache, dass die params Requisite von react-Router auf die Komponente angewendet wird.

ApolloReact wird versuchen, die Requisiten aus der Komponente zu verwenden, um das Variablenobjekt automatisch zu erstellen, und da id in props verschachtelt ist, kann es es nicht finden.

Die Alternative ist speziell wo zu definieren durch Definieren eines options Methode, die ownProps und gibt die Variablen Objekt in graphql aber ich möchte es vermeiden, wenn möglich, finden id erhält.

Antwort

2

Nein, Sie können die Felder dieses zusammengesetzten Typs in der Abfrage nicht verwenden.

Ich denke, die beste Option, um die folgende Funktion zu erstellen sind:

const options = ({params: variables}) => ({variables})

und exportieren die verpackte Komponente wie folgt:

export default graphql(QUERY, {options})(Component)

diese Weise die Eigenschaft params vorbei react-router wird zum Variablenobjekt, das an die Abfrage übergeben wird, und Sie können es wie folgt verwenden:

<Component id="1" otherVar="some value"/> 

Mit der regelmäßigen Abfrage:

query ($id: ID!) { 
    getUser(id: $id) { 
    email 
    username 
    } 
} 
+0

Vielen Dank für Ihre Antwort, ich versuche nicht, einen Eingang zu verwenden, das alles hält, sondern ich versuche, die Standard-Funktionalität zu nutzen, die Apollo Reagieren lautet: " Standardmäßig versucht graphql, fehlende Variablen aus der Abfrage von ownProps zu übernehmen ". –

+0

Sicher! entfernte diesen Teil und fügte das tatsächliche Ergebnis hinzu, das Sie wollten, damit es mehr Sinn machte. – davidyaha

Verwandte Themen