乐闻世界logo
搜索文章和话题

How can I delay React Query fetch calls?

4 个月前提问
4 个月前修改
浏览次数27

1个答案

1

在使用React Query库进行数据获取时,有时我们可能不希望组件渲染完后立即进行数据的抓取。例如,我们可能想要在用户完成某些操作,比如填写表单或点击按钮后,才开始数据的抓取。React Query提供了几种方式来实现延迟fetch调用。

1. 使用enabled选项

useQueryuseQuery的变体允许我们通过enabled选项来控制查询的执行时机。enabled接受一个布尔值,当值为false时,查询不会自动执行。

示例代码:

javascript
import { useQuery } from 'react-query'; function fetchData() { return fetch('/api/data').then(res => res.json()); } function MyComponent({ shouldFetch }) { const { data, error, isLoading } = useQuery('data', fetchData, { enabled: shouldFetch, // 控制是否执行fetch }); if (isLoading) return <div>Loading...</div>; if (error) return <div>Error occurred!</div>; return <div>{data}</div>; }

在这个例子中,shouldFetch是一个布尔值,当它为true时,fetchData函数会被调用。我们可以根据实际情况(例如用户操作)来设置这个值。

2. 使用useQuery的变体useLazyQuery

useLazyQueryuseQuery相似,但它不会在组件渲染时立即触发查询。相反,它提供了一个触发查询的函数,我们可以在适当的时候调用它。

示例代码:

javascript
import { useLazyQuery } from 'react-query'; function fetchData() { return fetch('/api/data').then(res => res.json()); } function MyComponent() { const [fetchData, { data, error, isLoading }] = useLazyQuery('data', fetchData); if (isLoading) return <div>Loading...</div>; if (error) return <div>Error occurred!</div>; return ( <div> <button onClick={() => fetchData()}>Fetch Data</button> {data && <div>{data}</div>} </div> ); }

这里fetchData函数是由useLazyQuery提供的触发函数,我们将它绑定到一个按钮的点击事件上。这样,只有在用户点击按钮后,才会执行数据的抓取。

通过这些方法,我们可以灵活地控制React Query的fetch调用,使其更适应复杂的用户交互和数据依赖情况。

2024年8月5日 11:23 回复

你的答案