Yo uso first
after
y last
before
para hacer paginación. hasNextPage
y hasPreviousPage
son muy útiles.
Pero lo que necesito también es total count
para poder calcular y mostrar cosas como page 5 of 343 pages
en el cliente.
Desafortunadamente, eso no es parte de pageInfo
a pesar de que tengo la información en el sitio del servidor.
¿Puede incluir un campo total
en el pageInfo
y extender connectionFromArray
para incluir el total arrayLength
como connectionFromArraySlice
ya lo hace?
Gracias
3 respuestas
pageInfo
está diseñado para representar información sobre la página específica, mientras que el número total de elementos es realmente una propiedad de la conexión en sí. Recomendamos agregar un campo count
a la conexión. Puede consultarlo con:
fragment on TodoList {
tasks(first: 10) {
count # <-- total number of tasks
edges { ... }
pageInfo { ... }
}
La retransmisión admite campos arbitrarios en una conexión, por lo que puede nombrar esto count
, totalCount
, etc.
Gracias @ Joe Savona
Él tiene toda la razón. Como me llevó un momento descubrir cómo agregar realmente la propiedad a la conexión en el sitio del servidor, pensé que también lo compartiría aquí:
var {connectionType: postsConnection} = connectionDefinitions({
name: 'post',
nodeType: qlPost,
connectionFields: () => ({
totalCount: {
type: GraphQLInt,
resolve: (connection) => connection.totalCount,
description: `A count of the total number of objects in this connection, ignoring pagination.
This allows a client to fetch the first five objects by passing "5" as the
argument to "first", then fetch the total count so it could display "5 of 83",
for example.`
}
})
});
Espero que ayude a las demás.
Salud
Utilicé el campo personalizado totalCount
en la conexión durante un tiempo, pero introdujo una complejidad que no vi al principio (al actualizar las conexiones después de una mutación, debe consultarlo con los mismos argumentos si desea que se actualice automáticamente )
Por lo tanto, volví a tener un campo count
al lado de cada una de mis conexiones. En su ejemplo, eso significa:
fragment on TodoList {
taskCount
tasks {
edges { ... }
}
}
Y creé un pequeño ayudante que lo crea para mí: https://github.com/ rea-app / relay-connection-count
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.