2017-02-07 3 views
1

Ich versuche, eine Relay-Abfrage auszuführen, dass auf Daten von einer anderen Relais AbfrageRelay-Abfrage, dass auf Daten aus einer Relay-Abfrage hängt

dies hängt Unter der Annahme, läuft unter einer URL wie /job/{jobID}

Reagieren

render() { 

    const job = this.props.job 

    return(
     <h1>{job.name}</h1> 

     <TasksOutstanding 
     project={job.project} 
     from={job.startDate} 
     to={job.finishDate} /> 
) 
} 

Relay

fragments: { 
    job:() => Relay.QL` 
     fragment on Job { 
     name 
     startDate 
     finishDate 
     project { 
      ${TasksOutstanding.getFragment('project')} 
     } 
    } 
    `, 

Also muss ich startdate und finishDate in das Fragment, so etwas wie ${TasksOutstanding.getFragment('project',{from, to})}

Aber diese Werte (fromto) unbekannt sind auf dem anfänglichen holen (alles, was ich dann die jobID ist haben) bekommen

Wie sind die Menschen damit umgehen? Sollte ich nur eine zweite Anfrage auf der Komponente ausführen mounte, sobald ich die Werte startDate und finishDate habe?

Antwort

1

Sie müssen Feld mit arguments erstellen, das ist GraqhQL Feature und Sie sollten es mit Ihrem Werkzeug für die Modellierung des Schemas tun können.

Relay variables wird auch nützlich sein. Sie werden das Problem lösen, dass Sie sie beim ersten Abruf nicht kennen.

So deklarieren project Feld mit from und to Argumente, Abfrage das Feld mit Argumenten sind entsprechende Daten für das Projektfeld zurückgeben. Ihre Behälter sollte wie folgt aussehen:

initialVariables: { 
    from: null, 
    to: null 
}, 

fragments: { 
    job:() => Relay.QL` 
    fragment on Job { 
     name 
     startDate 
     finishDate 
     project(from: $from, to: $to) { 
     ${TasksOutstanding.getFragment('project')} 
     } 
    } 
    `, 
} 

Dann während des Anwendungslebens, können Sie Ihre Variablen mit setVariables-job.startDate und job.finishDate und haben richtige project geholt einstellen.

+0

Ok danke, also ist der Weg, dies zu lösen, eine nachfolgende Anfrage mit setVariables durchzuführen. Das macht Sinn, ich habe nur gehofft, dass es eine Möglichkeit geben würde, dies in einer einzigen Anfrage zu tun. – Tim

Verwandte Themen