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

如何在RTK Query端点覆盖prepareHeaders设置的Accept-Language?

解决RTK Query端点覆盖prepareHeaders中设置的请求头问题

问题核心在于执行顺序:端点里定义的headers会先被合并到请求头中,之后才会调用prepareHeaders函数。你原来的prepareHeaders会无条件设置Accept-Language,自然就把端点里的设置覆盖了。

只需要修改prepareHeaders的逻辑,让它只在请求头中没有Accept-Language时,才用i18n的语言设置:

import { fetchBaseQuery, retry } from '@reduxjs/toolkit/dist/query/react'
import i18n from 'i18next';

export const baseQuery = retry(
  fetchBaseQuery({
    timeout: 5000,
    headers: {
      'Content-Type': 'application/json;charset=utf-8',
      'Access-Control-Allow-Origin': '*'
    },
    prepareHeaders: (headers) => {
      if (accessToken) {
        // 仅当请求头中未设置Accept-Language时,才使用i18n的语言
        if (!headers.has('Accept-Language')) {
          headers.set('Accept-Language', i18n.language);
        }
      }
      return headers;
    },
  }),
  { maxRetries: 3 }
);

你的端点代码不需要改动,保持原来的写法即可:

export const sampleApi = createApi({
  reducerPath: 'sampleApi',
  baseQuery: baseQuery,
  endpoints: (builder) => ({
    getLotteryOdds: builder.query({
      query: () => ({
        url: '/sample',
        method: 'GET',
        headers: {
          'Accept-Language': 'en'
        }
      }),
    }),
  })
})

这样一来,当端点指定了Accept-Language时,prepareHeaders会跳过设置,直接保留端点的配置;没指定时,就用i18n的当前语言,完美满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:12:14