2016-02-29 12 views
7

Attualmente sto lavorando a una pagina che visualizza lo stato di un determinato insieme di "attività" per un utente specifico. Per recuperare i dati, ho il seguente contenitore Relay:Relay - imposta la variabile prima della query

export default Relay.createContainer(TaskReview, { 
    initialVariables: { 
    limit: Number.MAX_SAFE_INTEGER, 
    studentId: null, 
    }, 
    fragments: { 
    task:() => Relay.QL` 
     fragment on Task { 
     id, 
     title, 
     instruction, 
     end_date, 
     taskDataList(first: $limit, type: "subTasks", member: $studentId) { 
      edges { 
      node { 
       id, 
       answer, 
       completion_date, 
      } 
      } 
     }, 
     ... 

per definire quali utenti voglio ottenere i dati da, io uso:

componentWillMount =() => { 
    let {relay} = this.props; 
    relay.setVariables({ 
    studentId: this.props.member.id 
    }); 
} 

Tuttavia, il problema qui è che la query è prima eseguito con null come definito in initialVariables. L'implementazione del mio back-end lo fa in modo che se lo studentId è NULL, restituisce i dati per tutti i membri.

Il risultato è che la query precedente viene eseguita due volte, la prima volta con tutti i membri e la seconda volta con il dato memberId.

Questo incasina con altre cose all'interno del mio componentWillUpdate. È comunque possibile passare questa variabile e ottenere solo i dati per quel membro nella prima query?

Grazie.

risposta

2

Prime l'app con queste condizioni iniziali passando la variabile lungo il percorso.

class TaskReviewRoute extends Relay.Route { 
    static paramDefinitions = { 
    studentId: {required: true}, 
    }; 
    static queries = { 
    task:() => Relay.QL`query { ... }`, 
    }; 
    static routeName = 'TaskReviewRoute'; 
} 

<Relay.RootContainer 
    Container={TaskReview} 
    route={new TaskReviewRoute({studentId: '123'})} 
/> 
+1

Potresti spiegare di più sulla tua risposta, in che modo questo risolverà il problema dell'OP? Al caricamento iniziale, lo ID studente sarà nullo, quindi la richiesta invia il valore nullo al back-end per recuperare i dati. Questo sta causando il problema. – lvarayut

+0

Se si passa 'studentId' al contenitore di inoltro attraverso la route come ho descritto sopra, e _remove_ la logica' componentWillMount', quindi 'studentId' non sarà nullo dall'inizio. Pensa a 'initialVariables' come segnaposto/predefinito nel caso in cui un valore non sia passato dal genitore come oggetti di scena (ad es. Da Relay.RootContainer' a causa della presenza del parametro di percorso descritto sopra). – steveluscher

+0

cosa succede se 'studentId' non è conosciuto in anticipo e non può essere passato all'inizializzatore del percorso? Ho una situazione in cui un valore è passato attraverso il 'params' del router, quindi ho bisogno di un altro modo per fare questo – nburk

Problemi correlati