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

2.5K
Vistas
React-Query: cómo usar Query cuando se hace clic en el botón

Soy nuevo en esta biblioteca de consulta de reacción .

Sé que cuando quiero obtener datos, con esta biblioteca puedo hacer algo como esto:

 const fetchData = async()=>{...} // it starts fetching data from backend with this line of code const {status, data, error} = useQuery(myKey, fetchData());

Funciona. Pero, ¿cómo activar la obtención de datos solo cuando se hace clic en un botón? , sé que probablemente podría hacer algo como <Button onPress={() => {useQuery(myKey, fetchData())}}/> , pero cómo administrar los datos y el estado devueltos...

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

0

De acuerdo con la referencia de la API , debe cambiar la opción enabled a falso para deshabilitar la ejecución automática de una consulta. Luego vuelves a buscar manualmente.

 // emulates axios/fetch since useQuery expectes a Promise const emulateFetch = _ => { return new Promise(resolve => { resolve([{ data: "ok" }]); }); }; const handleClick = () => { // manually refetch refetch(); }; const { data, refetch } = useQuery("key", emulateFetch, { refetchOnWindowFocus: false, enabled: false // turned off by default, manual refetch is needed }); return ( <div> <button onClick={handleClick}>Click me</button> {JSON.stringify(data)} </div> );

Caja de arena de trabajo aquí .

Bonificación: puede pasar cualquier cosa que devuelva un valor booleano a enabled . De esa manera, podría crear consultas dependientes/serie.

 // Get the user const { data: user } = useQuery(['user', email], getUserByEmail) // Then get the user's projects const { isIdle, data: projects } = useQuery( ['projects', user.id], getProjectsByUser, { // `user` would be `null` at first (falsy), // so the query will not execute until the user exists enabled: user, } )
over 4 years ago · Santiago Trujillo Denunciar

0

Hay otra forma de hacer esto que también funciona si desea activar varias recuperaciones.

 const [fetch, setFetch] = useState(null); const query = useQuery(["endpoint", fetch], fetchData); const refetch = () => setFetch(Date.now()); // call the refetch when handling click.

Si desea recuperar varias entidades, puede tener un useState de nivel superior que se llame, por ejemplo, fetchAll y:

 ... const query = useQuery(["endpoint", fetch, fetchAll], fetchData); ...

y este código también se activará si presiona un botón para buscar todo.

over 4 years ago · Santiago Trujillo Denunciar

0

puedes usar useLazyQuery()

 import React from 'react'; import { useLazyQuery } from '@apollo/client'; function DelayedQuery() { const [getDog, { loading, error, data }] = useLazyQuery(GET_DOG_PHOTO); if (loading) return <p>Loading ...</p>; if (error) return `Error! ${error}`; return ( <div> {data?.dog && <img src={data.dog.displayImage} />} <button onClick={() => getDog({ variables: { breed: 'bulldog' } })}>Click me!</button> </div> ); }

referencia: https://www.apollographql.com/docs/react/data/queries/#manual-execution-with-uselazyquery

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes probar esta versión:

 const fetchData = async()=>{...} // it starts fetching data from backend with this line of code const {status, data, error, refetch } = useQuery( myKey, fetchData(), { enabled: false, } ); const onClick = () => { refetch() } // then use onClick where you need it

De la documentación Doc :

enabled: boolean

  • Establézcalo en falso para deshabilitar la ejecución automática de esta consulta.
  • Se puede utilizar para consultas dependientes.

refetch: (options: { throwOnError: boolean, cancelRefetch: boolean }) => Promise<UseQueryResult>

  • Una función para recuperar manualmente la consulta.
  • Si la consulta falla, solo se registrará el error. Si desea que se arroje un error, pase la throwOnError: true option
  • Si cancelRefetch es true , la solicitud actual se cancelará antes de que se realice una nueva solicitud.
over 4 years ago · Santiago Trujillo Denunciar

0

Al principio, la consulta de reacción nos da la opción habilitada y, de forma predeterminada, es verdadera

 const fetchData = async()=>{...} const {status, data, error , refetch} = useQuery(myKey, fetchData() , { enabled : false } ); <button onClick={() => refetch()}>Refetch</button>
over 4 years ago · Santiago Trujillo Denunciar

0

Debe pasar el manual: true para que la consulta no se obtenga en el montaje. Además, debe pasar fetchData sin los paréntesis, de modo que pase la referencia de la función y no el valor. Para llamar a la consulta, usa refetch().

 const {status, data, error, refetch} = useQuery(myKey, fetchData, { manual: true, }); const onClick = () => { refetch() }

Consulte la sección de consulta manual en los documentos de consulta de reacción para obtener más información https://github.com/tannerlinsley/react-query#manual-querying

over 4 years ago · Santiago Trujillo Denunciar

0

Parece que la documentación cambió y ahora mismo falta la sección de consulta manual. Sin embargo, al observar la API useQuery, probablemente deba establecer enabled en falso y luego usar refetch para consultar manualmente cuando se presiona el botón. También es posible que desee utilizar force: true para que consulte independientemente de la actualización de los datos.

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