You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RTK Query链式查询实现:根据帖子userId获取用户名渲染

RTK Query 链式查询(依赖前序查询参数)实现方案

针对你需要根据帖子的userId获取对应用户名并渲染的场景,最直接的实现方式是在组件内嵌套使用RTK Query钩子,利用RTK Query的自动缓存机制避免重复请求。以下是具体步骤和代码示例:

1. 定义API Endpoints

首先在API切片中定义获取帖子和单个用户的查询端点:

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const apiSlice = createApi({
  reducerPath: 'api',
  baseQuery: fetchBaseQuery({ baseUrl: 'https://jsonplaceholder.typicode.com/' }),
  endpoints: (builder) => ({
    // 获取帖子列表
    getPosts: builder.query({
      query: () => 'posts',
    }),
    // 根据userId获取用户信息
    getUser: builder.query({
      query: (userId) => `users/${userId}`,
    }),
  }),
});

export const { useGetPostsQuery, useGetUserQuery } = apiSlice;

2. 组件内实现链式查询与渲染

先获取帖子列表,再遍历每个帖子,用其userId发起用户查询,同时处理各阶段状态:

import { useGetPostsQuery, useGetUserQuery } from './apiSlice';

function PostsWithUsers() {
  // 第一步:获取所有帖子
  const { data: posts, error: postsError, isLoading: postsLoading } = useGetPostsQuery();

  // 处理帖子查询状态
  if (postsLoading) return <div>加载帖子中...</div>;
  if (postsError) return <div>帖子加载失败:{postsError.message}</div>;
  if (!posts) return <div>暂无帖子数据</div>;

  return (
    <div className="posts-container">
      <h2>帖子列表(含作者)</h2>
      {posts.map((post) => (
        <div key={post.id} className="post-card">
          <h3>{post.title}</h3>
          <p className="post-body">{post.body}</p>
          
          {/* 第二步:对当前帖子的userId发起用户查询 */}
          const { data: user, error: userError, isLoading: userLoading } = useGetUserQuery(post.userId);
          
          <div className="post-author">
            {userLoading && <span>加载作者信息...</span>}
            {userError && <span>作者信息加载失败</span>}
            {user && <span>作者:{user.name}</span>}
          </div>
        </div>
      ))}
    </div>
  );
}

export default PostsWithUsers;

关键说明

  • 自动缓存优化:RTK Query会自动缓存getUser查询结果,同一个userId仅发起一次网络请求,后续渲染直接复用缓存数据。
  • 状态分离处理:分别处理帖子和单个用户查询的加载、错误状态,保证UI友好性,避免单个请求失败导致组件崩溃。
  • 批量查询优化(可选):若需减少请求次数,可在getPosts的transformResponse中批量获取所需用户数据,或新增合并查询的endpoint,但嵌套钩子的方式是最简洁且符合RTK Query设计理念的方案。

内容的提问来源于stack exchange,提问作者alexius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:12:41