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

How to get response for a certain query in useQueries

2 个月前提问
2 个月前修改
浏览次数20

1个答案

1

在React Query库中,useQueries 是一个非常强大的hook,它允许你同时运行多个异步查询,并追踪它们的状态。当你需要基于用户输入或一系列相关数据点同时获取多个数据源时,这个hook非常有用。

使用 useQueries 获取特定查询的响应

要使用 useQueries 获取特定查询的响应,你首先需要构建一个查询数组,每个查询都包含唯一的 queryKey 和一个 queryFn 函数。每个查询都会返回其状态和数据,因此你可以通过索引或其他方式来访问特定查询的响应。

javascript
import { useQueries } from 'react-query'; function fetchUserData(userId) { return fetch(`https://api.example.com/users/${userId}`) .then(res => res.json()); } function fetchProjects(userId) { return fetch(`https://api.example.com/users/${userId}/projects`) .then(res => res.json()); } function MyComponent({ userId }) { const results = useQueries([ { queryKey: ['user', userId], queryFn: () => fetchUserData(userId) }, { queryKey: ['projects', userId], queryFn: () => fetchProjects(userId) } ]); const userData = results[0].data; const projectsData = results[1].data; if (results.some(result => result.isLoading)) { return <div>Loading...</div>; } if (results.some(result => result.isError)) { return <div>Error occurred!</div>; } return ( <div> <h1>{userData.name}</h1> <ul> {projectsData.map(project => ( <li key={project.id}>{project.name}</li> ))} </ul> </div> ); }

解释

在上面的代码示例中:

  1. 我们使用 useQueries hook 来同时触发两个API请求:一个用于获取用户数据,另一个用于获取该用户的项目列表。
  2. 每个查询都通过一个对象来定义,包括 queryKeyqueryFnqueryKey 是一个数组,用于唯一标识查询;queryFn 是一个函数,返回一个promise,promise解析后返回数据。
  3. useQueries 返回一个数组 results,其中每个元素对应传入的查询数组中的一个查询的结果。
  4. 我们分别通过索引访问 results 来得到用户数据和项目数据。
  5. 在渲染部分,我们首先检查是否有任何查询正在加载或发生错误,然后展示用户名称和项目列表。

这个方法的优势在于它能够让你以非常结构化和响应式的方式处理多个并发数据请求,同时保持代码的可读性和可维护性。

2024年8月5日 11:17 回复

你的答案