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

158
Vistas
Llamar condicionalmente a una API usando el enlace React-Query

Estoy usando react-query para hacer llamadas a la API y, en este caso problemático, solo quiero llamar a la API si se cumplen ciertas condiciones.

Tengo un cuadro de entrada donde los usuarios ingresan una consulta de búsqueda. Cuando se cambia el valor de entrada, se llama a un servidor de búsqueda con el contenido de la entrada como consulta de búsqueda... pero solo si el valor de entrada tiene más de 3 caracteres.

En mi componente de reacción estoy llamando:

 const {data, isLoading} = useQuery(['search', searchString], getSearchResults);

Y mi función getSearchResults hará, condicionalmente, una llamada a la API.

 const getSearchResults = async (_, searchString) => { if (searchString.length < 3) return {data: []} const {data} = await axios.get(`/search?q=${searchString}`) return data; }

No podemos usar un enlace dentro de un condicional, así que puse la condición en mi función de llamada API.

Esto casi funciona. Si ingreso una cadena de consulta corta, no se realiza ninguna solicitud de API y obtengo una matriz vacía para los data . ¡Hurra!

Pero, isLoading cambiará a true brevemente, aunque no se esté realizando una solicitud HTTP. Entonces mi indicador de carga muestra cuando no hay actividad real en la red.

¿Estoy malinterpretando cómo resolver mejor mi caso de uso? ¿Hay alguna forma de asegurar que isLoading devolverá falso si no hay actividad HTTP?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La clave era usar consultas dependientes

Entonces, en mi componente principal, creo un valor booleano y lo paso a la opción enabled del gancho useQuery :

 const isLongEnough = searchString.length < 3; const {data, isLoading} = useQuery(['search', searchString], getSearchResults, {enabled: isLongEnough});

y el método de llamada a la API es simplemente la llamada a la API, no condicional:

 const getSearchResults = async (_, searchString) => { const {data} = await axios.get(`/search?q=${searchString}`); return data; }

Los documentos describen consultas dependientes como una solución para cargar datos desde puntos finales de API posteriores, pero la opción enable puede aceptar cualquier valor booleano. En este caso, si la cadena de consulta de búsqueda es lo suficientemente larga.

over 4 years ago · Santiago Trujillo 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