es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  

Answer

  1. Avatar for 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:

    1. Clave de caché incorrecta: Por defecto, React Query utiliza todo el objeto de consulta como clave de caché. Esto significa que si alguna propiedad en el objeto de consulta cambia, incluso si la función queryFn sigue siendo la misma, React Query no utilizará la caché. En este caso, es posible que alguna propiedad en el objeto de consulta myStuff 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:
    useQuery(
      ["myStuff", {param1, param2}],
      getMyStuffQuery().queryFn
    )
    
    1. Política de datos obsoletos: Por defecto, React Query utilizará datos obsoletos de la caché y buscará nuevos datos en segundo plano cada vez que se monte o se actualice un componente. Sin embargo, aún actualizará la caché con los nuevos datos una vez que los haya obtenido del servidor. Es posible que la función 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ón staleTime con un valor mayor para indicarle a React Query que considere los datos como frescos durante más tiempo.
    2. Implementación incorrecta de queryFn: También es posible que la forma en que se implementa makeSomeApiCall() esté causando que React Query siempre considere que los datos están obsoletos. Por ejemplo, si makeSomeApiCall() 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ón queryFn 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.

Comments are closed.