我在浏览Apollo React hooks的文档。
我看到有两个查询钩子要使用,分别是useQuery和useLazyQuery
我在看这篇文章。https://www.apollographql.com/docs/react/api/react/hooks/
谁能给我解释一下,它们之间有什么区别,在什么情况下应该使用它。
发布于 2020-09-01 13:03:02
当组件调用useQuery时,它会触发随后的查询。
但是当调用useLazyQuery时,它不会触发随后的查询,而是返回一个可用于手动触发查询的函数。在此页面上进行了说明:https://www.apollographql.com/docs/react/data/queries/#executing-queries-manually
当React挂载并呈现调用useQuery钩子的组件时,
客户端将自动执行指定的查询。但是,如果您想要执行查询以响应不同的事件,比如用户单击一个按钮,该怎么办呢?
useLazyQuery钩子非常适合执行查询,以响应组件呈现以外的事件。这个钩子的作用与useQuery类似,但有一个关键的例外:当调用useLazyQuery时,它不会立即执行与之相关的查询。相反,它在其结果元组中返回一个函数,您可以在准备执行查询时调用该函数。
发布于 2020-09-20 15:07:26
假设您有一个组件,其中调用了useQuery,那么一旦该组件挂载,useQuery就会运行,并从服务器获取数据。但是,如果在该组件中使用useLazyQuery而不是useQuery,则在挂载组件时不会运行查询,也不会获取数据。相反,您可以根据自己的需求运行查询,比如在单击按钮之后。示例:
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,则会获取数据并显示图像
发布于 2021-12-09 01:26:49
更新:
从阿波罗客户端3.5.0开始,useLazyQuery现在返回一个承诺(2021-11-08)
https://stackoverflow.com/questions/63681650
复制相似问题