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
¿Cómo usar la consulta Lazy con React-query?

Estoy usando React-query para mis llamadas a la API. Me pregunto si hay una manera de llamar a la consulta de forma perezosa.

Lo que significa llamar a la consulta solo cuando cambia un parámetro de consulta.

Esto es lo que tengo actualmente; Estoy usando un truco con el "useEffect" en el que, si el nombre de la receta cambia, ejecuta la función de recuperación.

 export const searchRecipeByName = async (recipeName: string) => { return await api.get( `/recipes/complexSearch?apiKey=${process.env.NEXT_PUBLIC_SPOONACULAR_API_KEY}&query=${recipeName}&addRecipeInformation=true&fillIngredients=true` ); };
 const [recipeName, setRecipeName] = useState(""); const { data, refetch } = useQuery( "homePageSearchQuery", () => searchRecipeByName(recipeName), { enabled: false } ); // HACK useEffect(() => { if (!!recipeName) { refetch(); } }, [recipeName]); const handleOnSearchSubmit = async (recipeSearch: RecipeSearch) => { setRecipeName(recipeSearch.search); };

Preferiblemente, me gustaría llamar a la consulta en la función "handleOnSearchSubmit".

Podría crear un enlace useLazyQuery personalizado para manejar esto, pero me pregunto si React-query tiene una forma nativa de manejar esto.

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

0

Preferiblemente, me gustaría llamar a la consulta en la función "handleOnSearchSubmit".

Esta es una forma bastante imperativa de pensar en las cosas, pero reaccionar-consultar es más declarativo. No especifica: "cuando hago clic en ese botón, quiero buscar", pero simplemente dice: "estas son las entradas que necesito" y react-query volverá a buscar cada vez que esas entradas cambien.

Entonces, lo que quiere hacer es poner las cosas que necesita para que su consulta se ejecute en la clave de consulta, para que reaccione-consulta

  • lo almacena en caché por separado para cada dependencia
  • puede deshabilitarlo siempre que las dependencias no estén listas
 const [recipeName, setRecipeName] = React.useState('') const { isLoading, data } = useQuery( ['homePageSearchQuery', recipeName], () => searchRecipeByName(recipeName), { enabled: !!recipeName } ])

luego, todo lo que necesita hacer es llamar a setRecipeName en handleOnSearchSubmit y react-query hará la consulta.

algunas cosas más que tal vez quieras considerar:

  • si desea evitar un estado de carga difícil entre los cambios de nombre de receta, establezca recipeName keepPreviousData: true
  • el código anterior ejecutará una consulta cada vez recipeName el nombre de la receta. Si eso no sucede al hacer clic en un botón, pero digamos que cada vez que el usuario escribe algo en un campo de entrada, desea eliminar el rebote. Para esos casos, considere algo como useDebounce :
 const [recipeName, setRecipeName] = React.useState('') const debouncedRecipeName = useDebounce(recipeName, 1000) const { isLoading, data } = useQuery( ['homePageSearchQuery', debouncedRecipeName], () => searchRecipeByName(debouncedRecipeName), { enabled: !!debouncedRecipeName } ])

Esto le permitirá ingresar datos y mostrarlos en un campo de texto, pero solo crea una nueva entrada de caché/dispara una nueva solicitud después de 1 segundo de inactividad.

  • si desea tener un botón que envíe el formulario, es mejor "levantar el estado": tener un estado más global del que depende la consulta y algún estado local para el formulario. Una vez que el usuario presiona "enviar", guarda la selección del usuario en el estado que se encuentra más arriba, lo que activará una consulta. Me gusta usar la url para esto, y tengo un ejemplo completo de codesandbox aquí . El estado del formulario real no está controlado en ese ejemplo, pero también puede usar el estado o una biblioteca de formulario para eso
about 4 years ago · Juan Pablo Isaza Denunciar

0

Hazlo asi

 const { isLoading, data } = useQuery([ 'homePageSearchQuery', {recipeName}], () => searchRecipeByName(recipeName), {} );

Ejecutará la consulta cada vez que cambie el valor de nombreReceta.

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