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

如何在Redux Toolkit的injectEndpoint中获取Store内的Token?

解决方案

有两种常用方式可以在RTK Query的injectEndpoint中获取Redux Store的状态值,推荐第二种全局配置方式,避免重复编写认证逻辑:

方式一:在单个Endpoint的Query函数中直接获取

RTK Query的query函数支持接收第二个参数(API上下文对象),其中包含getState方法,可直接获取整个Store的状态。修改你的getOrgInventory端点代码如下:

export const organizationApiSlice = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    getOrgInventory: builder.query({
      // 新增第二个参数{ getState }
      query: (id, { getState }) => {
        // 从Store中取出token,根据你的state结构调整路径
        const token = getState().userDetails.token;
        return {
          url: `${ORGANIZATION_URL}/${id}/inventory`,
          headers: {
            "Content-Type": "application/json",
            Authorization: token ? `Bearer ${token}` : "",
          },
        };
      },
      keepUnusedDataFor: 4,
    }),
  }),
});

方式二:在BaseQuery中全局配置认证头(推荐)

如果多个API请求都需要携带认证头,更高效的方式是在baseQuery中统一处理,所有端点会自动继承该配置:

1. 修改baseQuery定义

假设你使用RTK Query自带的fetchBaseQuery,修改如下:

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

const baseQuery = fetchBaseQuery({
  baseUrl: "你的API基础地址", // 替换为实际基础URL
  // 预处理请求头
  prepareHeaders: (headers, { getState }) => {
    const token = getState().userDetails.token;
    // 存在token则设置认证头
    if (token) {
      headers.set('Authorization', `Bearer ${token}`);
    }
    // 全局设置Content-Type
    headers.set('Content-Type', 'application/json');
    return headers;
  },
});

export const apiSlice = createApi({
  baseQuery,
  tagTypes: ["User", "Organization", "Inventory", 'Item'],
  endpoints: (builder) => ({}),
});

2. 简化Endpoint代码

此时端点代码无需重复配置请求头,简化为:

export const organizationApiSlice = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    getOrgInventory: builder.query({
      query: (id) => ({
        url: `${ORGANIZATION_URL}/${id}/inventory`,
      }),
      keepUnusedDataFor: 4,
    }),
  }),
});

内容的提问来源于stack exchange,提问作者Khant Min Si Thu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:41:21