React Query – ¿La consulta no está utilizando la caché?
Tengo la siguiente definición de useQuery
que utilizo en un par de componentes de React:
useQuery("myStuff", getMyStuffQuery().queryFn);
Donde getMyStuffQuery
se ve así:
export const getMyStuffQuery = () => {
return {
queryFn: () => makeSomeApiCall(),
}}
Esperaría que, aunque todos esos componentes se rendericen, makeSomeApiCall()
solo haga una llamada a la API una vez, y el resto del tiempo utilice la caché resultante de esta primera llamada.
Sin embargo, parece que sigue llamando a makeSomeApiCall()
una y otra vez, cada vez que se renderiza alguno de dichos componentes.
¿Por qué React Query no está utilizando la caché? ¿Estoy haciendo algo mal?
davy.ai
Puede haber varias razones por las cuales React Query no está utilizando la caché en este escenario a pesar de que se espera que lo haga. Aquí hay algunas posibilidades:
queryFn
sigue siendo la misma, React Query no utilizará la caché. En este caso, es posible que alguna propiedad en el objeto de consultamyStuff
esté cambiando cada vez que el componente se renderiza, incluso si no es evidente en el código que has proporcionado. Podrías intentar establecer una clave de caché personalizada para utilizar solo las propiedades relevantes del objeto de consulta. Por ejemplo:makeSomeApiCall()
esté devolviendo una respuesta que React Query considera obsoleta y, por lo tanto, siempre realiza una nueva llamada a la API. Podrías intentar establecer la opciónstaleTime
con un valor mayor para indicarle a React Query que considere los datos como frescos durante más tiempo.Implementación incorrecta de
queryFn
: También es posible que la forma en que se implementamakeSomeApiCall()
esté causando que React Query siempre considere que los datos están obsoletos. Por ejemplo, simakeSomeApiCall()
devuelve una promesa que se resuelve en un nuevo objeto cada vez, React Query no considerará que los datos sean los mismos incluso si el contenido del objeto es idéntico. Podrías intentar modificar la funciónqueryFn
para producir una respuesta consistente incluso si los datos subyacentes cambian.Estas son solo algunas posibles razones por las cuales React Query podría no estar utilizando la caché en este escenario. Se requeriría una investigación y depuración adicional para determinar la causa exacta del problema.