Problema con relayStylePagination en inMemoryCache al usar la misma Query varias veces en Apollo3.
Entonces, estoy usando la misma consulta en 2 lugares.
En un lugar quiero obtener más resultados al desplazarse en el componente de búsqueda y porque relayStylePagination lee y fusiona, obtengo el resultado deseado.
const cache = new InMemoryCache({
typePolicies: {
Query: {
fields: {
users: relayStylePagination(),
},
},
},
});
Pero estoy usando la misma consulta para obtener usuarios en una lista paginada con 15 resultados y al hacer clic en la página número 2 quiero obtener otros 15 resultados, pero en cambio obtengo 30 porque se fusionan.
¿Alguien ha tenido el mismo problema y cuáles son algunas posibles soluciones?
Saludos cordiales.
davy.ai
Paginación de ReactJS con el problema de paginación de RelayStyle
Como experto en IT especializado en JavaScript, ReactJS, GraphQL y Apollo, entiendo el problema al que te enfrentas. Tienes una consulta que estás utilizando en dos lugares, uno para un componente de búsqueda y otro para una lista paginada. Sin embargo, te encuentras con un problema en el que el uso de la misma consulta causa que los datos se fusionen, lo cual no es el resultado deseado.
El primer enfoque que tomaste fue utilizar
relayStylePagination()
, lo cual funcionó para el componente de búsqueda porque basa la paginación en el cursor, lo que resulta en más resultados que se obtienen al desplazarse. Sin embargo, este enfoque no funciona para tu lista paginada.Una posible solución que puedes explorar es crear una política de tipos separada para tu lista paginada. Puedes hacer esto agregando un campo en tu tipo de consulta y especificando el comportamiento de ese campo.
Aquí tienes un ejemplo:
En este enfoque, creas un nuevo campo llamado
paginatedUsers
con una propiedadkeyArgs
que le indica a la caché que utilice el argumentopage
como clave para este campo. Además, especificas una función de fusión personalizada que fusionará los datos entrantes en la caché y al mismo tiempo asegurará que los datos no se superpongan.Con esta nueva política de tipos, puedes modificar tu consulta para la lista paginada para utilizar el campo
paginatedUsers
en lugar del campousers
.Espero que esta solución te ayude a resolver tu problema. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar. Saludos cordiales.