Saltar al contenido

Intentando llamar a useQuery en función con react-apollo-hooks

Poseemos la mejor información que hallamos en internet. Deseamos que te sirva de ayuda y si quieres aportar algo que nos pueda ayudar a perfeccionar nuestra información hazlo con total libertad.

Solución:

De los documentos de apolo

Cuando React monta y representa un componente que llama al gancho useQuery, Apollo Client ejecuta automáticamente la consulta especificada. Pero, ¿qué sucede si desea ejecutar una consulta en respuesta a un evento diferente, como que un usuario haga clic en un botón?

El gancho useLazyQuery es perfecto para ejecutar consultas en respuesta a eventos que no sean la representación de componentes.

Sugiero useLazyQuery. En términos simples, useQuery se ejecutará cuando su componente se renderice, puede usar skip opción para omitir la ejecución inicial. Y hay algunas formas de recuperar/recuperar más datos cuando lo desee. O puedes quedarte con useLazyQuery

Por ejemplo, si desea obtener datos cuando solo el usuario hace clic en un botón o se desplaza hacia abajo, puede usar useLazyQuery gancho.

useQuery es un React Hook declarativo. No está destinado a ser llamado en el sentido de una función clásica para recibir datos. En primer lugar, asegúrese de comprender los React Hooks o simplemente no los use por ahora (el 90 % de las preguntas en Stackoverflow ocurren porque las personas intentan aprender demasiadas cosas a la vez). La documentación de Apollo es muy buena para el oficial. react-apollo paquete, que utiliza accesorios de representación. Esto funciona igual de bien y una vez que haya entendido Apollo Client y Hooks puedes ir por un pequeño refactor. Así que las respuestas a sus preguntas:

¿Cómo llamo a useQuery varias veces?

No lo llamas varias veces. El componente se volverá a representar automáticamente cuando el resultado de la consulta esté disponible o se actualice.

¿Puedo llamarlo cuando quiera?

No, los ganchos solo se pueden llamar en el nivel superior. En su lugar, los datos están disponibles en su función desde el ámbito superior (cierre).

Tu updateInformation probablemente debería ser una mutación que actualice el caché de la aplicación, lo que nuevamente activa una nueva representación del componente React porque está “suscrito” a la consulta. En la mayoría de los casos, la actualización se realiza de forma totalmente automática porque Apollo identificará las entidades mediante una combinación de __typename y id. Aquí hay un pseudocódigo que ilustra cómo las mutaciones funcionan junto con las mutaciones:

const GET_USER_LIST = gql`
  query GetUserList 
    users 
      id
      name
    
  
`;

const UPDATE_USER = gql`
  mutation UpdateUser($id: ID!, $name: String!) 
    updateUser(id: $id, update:  name: $name ) 
      success
      user 
        id
        name
      
    
  
`;

const UserListComponen = (props) => {
  const  data, loading, error  = useQuery(GET_USER_LIST);
  const [updateUser] = useMutation(UPDATE_USER);

  const onSaveInformation = (id, name) => updateUser( variables:  id, name );

  return (
    // ... use data.users and onSaveInformation in your JSX
  );

Ahora, si el nombre de un usuario cambia a través de la mutación, Apollo actualizará automáticamente el caché y activará una nueva representación del componente. Luego, el componente mostrará automáticamente los nuevos datos. ¡Bienvenido al poder de GraphQL!

Hay respuestas que mencionan cómo se debe usar useQuery, y también sugerencias para usar useLazyQuery. creo que el key La conclusión es comprender los casos de uso de useQuery frente a useLazyQuery, que puede leer en la documentación. Intentaré explicarlo a continuación desde mi perspectiva.

useQuery es “declarativo” al igual que el resto de React, especialmente la representación de componentes. Esto significa que debe esperar que se llame a useQuery en cada representación cuando cambien el estado o las propiedades. Entonces, en inglés, es como, “Oye, reacciona, cuando las cosas cambian, esto es qué Quiero que preguntes”.

para useLazyQuery, esta línea en la documentación es key: “El gancho useLazyQuery es perfecto para ejecutar consultas en respuesta a eventos que no sean la representación de componentes”. En una programación más general, es “imperativo”. Esto le da el poder de llamar a la consulta como quiera, ya sea en respuesta a cambios de estado/prop (es decir, con useEffect) o controladores de eventos como clics en botones. En inglés, es como, “Hey React, esto es cómo Quiero consultar los datos”.

Nos puedes añadir valor a nuestro contenido informacional dando tu experiencia en las reseñas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *