首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在阿波罗graphQL中,useQuery和useLazyQuery有什么不同?

在阿波罗graphQL中,useQuery和useLazyQuery有什么不同?
EN

Stack Overflow用户
提问于 2020-09-01 13:02:02
回答 4查看 18.1K关注 0票数 17

我在浏览Apollo React hooks的文档。

我看到有两个查询钩子要使用,分别是useQueryuseLazyQuery

我在看这篇文章。https://www.apollographql.com/docs/react/api/react/hooks/

谁能给我解释一下,它们之间有什么区别,在什么情况下应该使用它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-09-01 13:03:02

当组件调用useQuery时,它会触发随后的查询。

但是当调用useLazyQuery时,它不会触发随后的查询,而是返回一个可用于手动触发查询的函数。在此页面上进行了说明:https://www.apollographql.com/docs/react/data/queries/#executing-queries-manually

当React挂载并呈现调用useQuery钩子的组件时,

客户端将自动执行指定的查询。但是,如果您想要执行查询以响应不同的事件,比如用户单击一个按钮,该怎么办呢?useLazyQuery钩子非常适合执行查询,以响应组件呈现以外的事件。这个钩子的作用与useQuery类似,但有一个关键的例外:当调用useLazyQuery时,它不会立即执行与之相关的查询。相反,它在其结果元组中返回一个函数,您可以在准备执行查询时调用该函数。

票数 16
EN

Stack Overflow用户

发布于 2020-09-20 15:07:26

假设您有一个组件,其中调用了useQuery,那么一旦该组件挂载,useQuery就会运行,并从服务器获取数据。但是,如果在该组件中使用useLazyQuery而不是useQuery,则在挂载组件时不会运行查询,也不会获取数据。相反,您可以根据自己的需求运行查询,比如在单击按钮之后。示例:

代码语言:javascript
复制
import React, { useState } from 'react';
import { useLazyQuery } from '@apollo/client';

function DelayedQuery() {
  const [dog, setDog] = useState(null);
  const [getDog, { loading, data }] = useLazyQuery(GET_DOG_PHOTO);

  if (loading) return <p>Loading ...</p>;

  if (data && data.dog) {
    setDog(data.dog);
  }

  return (
    <div>
      {dog && <img src={dog.displayImage} />}
      <button onClick={() => getDog({ variables: { breed: 'bulldog' } })}>
        Click me!
      </button>
    </div>
  );
}

在这里,只要单击该按钮,就只会运行查询,并获取数据并显示图像。但是,如果您在单击按钮之前(即组件挂载时)使用useQuery,则会获取数据并显示图像

票数 10
EN

Stack Overflow用户

发布于 2021-12-09 01:26:49

更新:

https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md#improvements-due-to-brainkim-in-8875

从阿波罗客户端3.5.0开始,useLazyQuery现在返回一个承诺(2021-11-08)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63681650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档