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

如何用Redux Toolkit的createApi配置API请求头?

问题解决:Redux Toolkit调用Urban Dictionary API的请求头及路径修正

你的代码存在两个核心问题,直接导致请求失败:

1. prepareHeaders未返回处理后的请求头

fetchBaseQuery的prepareHeaders函数必须返回修改后的headers对象,你的代码只执行了headers.set操作但没有返回,导致自定义请求头无法被正确携带到请求中。

2. API请求路径错误

Urban Dictionary的RapidAPI接口是通过**查询参数term**传递要查询的单词,而非路径参数。原代码把单词作为路径拼接,会生成不符合API规范的错误请求地址。

修正后的完整代码

import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
import { TWord } from "../../types/wordType";

export const apiSlice = createApi({
  reducerPath: "api",
  baseQuery: fetchBaseQuery({
    baseUrl: "https://mashape-community-urban-dictionary.p.rapidapi.com",
    prepareHeaders: (headers) => {
      headers.set("X-RapidAPI-Key", "<my key>");
      headers.set("X-RapidAPI-Host", "mashape-community-urban-dictionary.p.rapidapi.com");
      // 必须返回处理后的headers
      return headers;
    },
  }),
  tagTypes: ["Words"],
  endpoints: (builder) => ({
    getWord: builder.query<TWord, string>({
      // 使用查询参数term传递目标单词
      query: (word) => ({
        url: "/define",
        params: {
          term: word
        }
      }),
    }),
  }),
});

export const { useGetWordQuery } = apiSlice;

关键修改说明

  • 返回headers:在prepareHeaders末尾添加return headers;,确保自定义请求头被正确注入请求。
  • 调整请求结构:将baseUrl改为API根域名,endpoint的url设为/define,通过params传递term参数,完全匹配API的请求规范。
  • 明确泛型类型:给builder.query添加<TWord, string>泛型约束,强化类型检查,避免潜在的类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:15:29