Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
react-query no deja de intentar recuperar una API

Quiero implementar este escenario mediante react-query :

Mi componente obtiene una API y debe intentarlo una vez cuando se desconectó Internet del cliente y nunca volver a recuperar si se volvió a conectar Internet... y después de 3 segundos si el reintento no tuvo éxito, debería mostrar un error con un botón para volver a intentar la solicitud.

 const URL = 'https://randomuser.me/api/?results=5&inc=name'; const Example = () => { const { error, data, isLoading, refetch } = useQuery('test', () => fetch(URL).then(response => response.json()).then(data => data.results), { refetchOnWindowFocus: false, refetchOnReconnect: false, retry: 1, retryDelay: 3000 }); if (isLoading) return <span>Loading...</span> if (error) return <span>Error: {error.message} <button onClick={refetch}>retry</button></span> return ( <div> <h1>Length: {data ? console.log(data.length) : null}</h1> <button onClick={refetch}>Refetch</button> </div> ) }

Al considerar el código anterior, configuré refetchOnReconnect: false para deshabilitar la recuperación después de que se conectó a Internet, retry: 1 para configurar una vez intentar y retryDelay: 3000 para establecer un límite para el tiempo de reintento.

Pero cuando uso Throttling -> offline en DevTools, después de hacer clic en el botón solo muestra el último resultado y no muestra el error y el botón de reintento después de 3 segundos...

Entonces, ¿hay alguna forma de manejar esta función?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

React-query está usando los datos en el caché, debe invalidar la consulta para obtener los datos nuevamente llamando a la función invalidateQueries :

 onst URL = 'https://randomuser.me/api/?results=5&inc=name' const Example = () => { // Get QueryClient from the context const queryClient = useQueryClient() const { error, data, isLoading, refetch } = useQuery( 'test', () => fetch(URL) .then(response => response.json()) .then(data => data.results), { refetchOnWindowFocus: false, refetchOnReconnect: false, retry: 1, retryDelay: 3000 } ) const buttonClickHandler = () => queryClient.invalidateQueries('test') // <=== invalidate the cache if (isLoading) return <span>Loading...</span> if (error) return ( <span> Error: {error.message} <button onClick={refetch}>retry</button> </span> ) return ( <div> <h1>Length: {data ? console.log(data.length) : null}</h1> <button onClick={buttonClickHandler}>Refetch</button> </div> ) }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda