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

如何在 RTK Query 中连接两个 query 查询?

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

1个答案

1

在 RTK Query 中,如果需要将两个 query 查询连接起来,通常的做法是在一个组件内部连续使用这两个查询的 hook,然后根据第一个查询的结果来决定第二个查询的行为。这样可以确保数据的依赖性和正确的数据流。

这里我会给出一个具体的例子来说明如何实现这个过程:假设我们有一个用户列表的查询 useGetUsersQuery 和一个根据用户 ID 获取用户详情的查询 useGetUserDetailsQuery

步骤 1: 使用第一个查询

首先,我们使用 useGetUsersQuery 来获取用户列表:

javascript
const { data: users, isError: isUserError } = useGetUsersQuery();

步骤 2: 根据第一个查询的结果调用第二个查询

然后,我们可以选择列表中的第一个用户(假设为了示例简化),并使用其 id 来调用第二个查询:

javascript
const firstUserId = users?.[0]?.id; const { data: userDetails, isError: isDetailsError } = useGetUserDetailsQuery(firstUserId, { skip: !firstUserId // 只有当 firstUserId 存在时才执行查询 });

这里的关键是 skip 选项,它允许我们在 firstUserId 未定义的情况下跳过查询,这通常在第一个查询尚未返回结果时出现。

实现依赖数据的更新

如果用户列表或者选定的用户 ID 发生变化,RTK Query 会自动重新发起 useGetUserDetailsQuery 查询,因为它的依赖项 firstUserId 发生了变化。这确保了用户详情的数据始终是最新的。

错误处理

在实际应用中,我们还需要处理可能出现的错误情况:

javascript
if (isUserError) { return <div>Failed to fetch users.</div>; } if (isDetailsError) { return <div>Failed to fetch user details.</div>; } if (!userDetails) { return <div>Loading...</div>; } return ( <div> <h1>{userDetails.name}</h1> <p>Email: {userDetails.email}</p> // 其他用户详细信息 </div> );

这个例子展示了如何在 RTK Query 中连接两个查询来处理更复杂的数据依赖和流。这种方式保持了代码的可读性和维护性,同时提供了强大的数据同步能力。

2024年7月15日 13:51 回复

你的答案