2 回答
TA贡献1806条经验 获得超8个赞
简短回答:您可以签出 useLazyQuery 而不是 useQuery。
文档链接:https ://www.apollographql.com/docs/react/data/queries/#executing-queries-manually
当 React 挂载并渲染调用 useQuery 钩子的组件时,Apollo Client 会自动执行指定的查询。但是,如果您想要执行查询以响应不同的事件(例如用户单击按钮)怎么办?
useLazyQuery 挂钩非常适合执行查询以响应组件呈现以外的事件。这个钩子就像 useQuery 一样,有一个关键的例外:调用 useLazyQuery 时,它不会立即执行其关联的查询。相反,它在其结果元组中返回一个函数,您可以在准备好执行查询时调用该函数
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>
);
}
TA贡献1826条经验 获得超6个赞
您可以在完成后调用查询,也可以在 api 调用后更新状态后调用await另一个查询。useEffect一般来说,像这样的东西,
const [state, setState] = useState({})
useEffect(async () => {
const result = await get('/api/blah-blah-blah')
// run your query here now that the await has resolved
}, [someDependency])
或者
const [state, setState] = useState({})
useEffect(async () => {
const result = await get('/api/blah-blah-blah')
setState(result)
}, [someDependency])
useEffect(() => {
if(state.id) {
// run the query
}
}, [state.someProp])
添加回答
举报