38
In Relay GraphQL, le connessioni e gli elenchi sono entrambi simili ad array, ma hanno caratteristiche diverse. Quando dovrei usare ciascuno?Quando devo usare una connessione Relay GraphQL e una lista semplice?
A
risposta
53
- più potente e flessibile di liste semplici.
- Impaginazione di supporto (avanti e indietro), con cursori.
- Supporto a grana fine mutation (ad esempio
RANGE_ADD
, RANGE_DELETE
, NODE_DELETE
, come descritto in the guide).
- Richiede un argomento
first
o last
per limitare la dimensione del set di risultati.
- Dispone di un campo
edges
che fornisce un posto per individuare dati specifici per bordo e bordo.
- Un concetto più pesante, che richiede più lavoro da definire nello schema.
liste
- semplice e leggero.
- Nessun supporto per l'impaginazione (l'intero elenco viene sempre restituito).
- Nessuna caratteristica speciale di mutazioni per prepending, accodamento ecc. (although it is a requested feature).
Quale usare?
- Ogni volta che è necessario l'impaginazione, è necessario utilizzare una connessione.
- Se hai bisogno di un controllo preciso sulle mutazioni, puoi scegliere di usare una connessione, anche se non hai bisogno di paginazione.
- Se si desidera che tutti gli elementi in una connessione, è possibile utilizzare
first
con un numero elevato.
- Se si desidera esporre un elenco breve con il minimo sforzo, utilizzare un elenco semplice.
La funzionalità di connessione in Relay sul lato client è del tutto dichiarativa? Sto vedendo che usando le connessioni si ottiene un "supporto di mutazione a grana fine" nel client. Esistono API imperative che utilizzano questa funzionalità? Non vedo niente, voglio solo confermare che non mi manca niente. –
Inoltre, perché le liste non forniscono supporto per l'impaginazione? Voglio dire, potresti costruire la tua impaginazione usando un campo di tipo lista, giusto? –
@dimadima È possibile supportare in modo assoluto l'impaginazione con gli elenchi. A graph.cool supportiamo sia un relay compatibile che un semplice endpoint graphql usando le liste per il tuo modello di dati. elenca le query che supportano l'impaginazione attraverso un meccanismo di salto e accettazione. Ad esempio {allUsers (skip: 20, take: 10)} restituirebbe la terza pagina. Il problema con questo approccio che gli indirizzi di inoltro è che se i dati vengono aggiunti tra le richieste della pagina, le pagine verranno spostate e rischi di perdere un nodo o di restituire duplicati. Questo è il motivo per cui è richiesto il cursore. – sorenbs