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

How do I make dependent queries in react- query ?

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

1个答案

1

在React Query中进行依赖查询(也称为依赖数据获取或条件查询)是一种非常有用的技术,它允许您在一个查询的数据依赖于另一个查询的数据时,顺序和条件地执行查询。这在实际应用中非常常见,例如,您可能需要先从一个API获取用户的ID,然后使用这个ID去获取用户的详细信息。

使用方法

在React Query中实现依赖查询,通常会用到useQuery钩子的enabled选项。这个选项可以接受一个布尔值,用来控制查询是否应该自动运行。如果enabled设置为false,则查询会在条件变为true时自动启动。

示例

假设我们有两个API端点:

  1. /api/user 返回用户的ID。
  2. /api/details/:userId 使用用户ID获取用户详细信息。

我们想在获取到用户ID后,才去获取用户的详细信息。下面是如何用React Query实现这一逻辑的代码示例:

jsx
import { useQuery } from 'react-query'; import axios from 'axios'; function UserProfile() { // 第一个查询:获取用户ID const { data: user, isSuccess: isUserFetched } = useQuery('user', () => axios.get('/api/user').then(res => res.data) ); // 第二个查询:依赖于第一个查询结果的用户详细信息查询 const { data: userDetails, isLoading, isError, error } = useQuery( 'userDetails', () => axios.get(`/api/details/${user.id}`).then(res => res.data), { // 只有当第一个查询成功,并且user.id存在时,才启动这个查询 enabled: isUserFetched && user && user.id } ); if (isLoading) return <div>Loading user details...</div>; if (isError) return <div>An error occurred: {error.message}</div>; // 渲染用户详细信息 return ( <div> <h1>User Details</h1> <p>Name: {userDetails.name}</p> <p>Age: {userDetails.age}</p> </div> ); }

解释

  1. 第一个查询 (useQuery('user', ...)) 获取用户基本信息,这里假设返回值中包含用户ID。
  2. 第二个查询 (useQuery('userDetails', ...)) 用于获取基于用户ID的详细信息。它的启动依赖于第一个查询的结果。通过enabled属性,我们保证只有在获取到用户ID之后才进行此查询。

这种方法确保了数据的加载按照所需的顺序进行,同时也保持了代码的清晰性和可维护性。

2024年8月5日 11:35 回复

你的答案