2015-12-05 10 views
10

La nuova espressione @relay(pattern: true) è stata introdotta in change log per relay.js0.5.Scopo di @relay (modello: true)

Ma non è possibile capire dalla descrizione né testare esattamente cosa fa e quando dovrei usarlo quando si scrive fatQueries.

Alcuni esempi sarebbero molto utili.

risposta

7

consideri una query GraphQL come il seguente:

viewer { 
    friends(first: 10) { 
    totalCount 
    edges { node { name } } 
    pageInfo { hasNextPage } 
    } 
} 

Quando si definisce un fat query per una mutazione del relè, per includere il nome di un campo senza specificare uno qualsiasi dei suoi sottocampi dice Relay che qualsiasi sottocampo di quel campo potrebbe cambiare come risultato di quella mutazione.

Purtroppo, ad omettere gli argomenti di connessione come ad esempio find, first, e last sul campo friends causerà un errore di convalida sui campi di collegamento-argomento-dipendente edges e pageInfo:

getFatQuery() { 
    return Relay.QL` 
    fragment on AddFriendMutationPayload { 
     viewer { 
     friends { edges, pageInfo } # Will throw the validation error below 
     } 
    } 
    `; 
} 

// Uncaught Error: GraphQL validation/transform error ``You supplied the `pageInfo` 
// field on a connection named `friends`, but you did not supply an argument necessary 
// to do so. Use either the `find`, `first`, or `last` argument.`` in file 
// `/path/to/MyMutation.js`. 

è possibile utilizzare il Direttiva @relay(pattern: true) per indicare che si desidera utilizzare la query grossa a corrispondenza di modello rispetto alla query rilevata, anziché utilizzarla come query completa.

getFatQuery() { 
    return Relay.QL` 
    fragment on AddFriendMutationPayload @relay(pattern: true) { 
     viewer { 
     friends { edges, pageInfo } # Valid! 
     } 
    } 
    `; 
} 

Per ulteriori informazioni sulle mutazioni vedere: https://facebook.github.io/relay/docs/guides-mutations.html#content

+0

Hmmm ... ho pensato che questo è accaduto automaticamente. Citando dal link sopra doc: 'Questa query grassa si presenta come qualsiasi altra query GraphQL, con un'importante distinzione. Sappiamo che alcuni di questi campi non sono scalari (come friendEdge e amici), ma notiamo che non abbiamo nominato nessuno dei loro figli tramite una subquery. In questo modo, indichiamo su Relay che qualsiasi cosa sotto quei campi non scalari può cambiare come risultato di questa mutazione. –

+1

Hunh. Ho scritto anche quei documenti. Dovrò telefonare a un amico su questo. @JoeSavona, per che cosa è la direttiva pattern? – steveluscher

+0

Ha chiamato un amico. Modifica la mia risposta! – steveluscher