Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

159
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!