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

无法在customAxios.js导入Redux Store,出现初始化前访问错误

解决Redux Store导入到customAxios时的"Cannot access 'WEBPACK_DEFAULT_EXPORT' before initialization"错误

这是循环导入导致的问题:你的store.js(或其依赖的rootReducer内的切片)间接导入了customAxios.js,而customAxios.js又直接导入store.js,导致模块初始化顺序混乱,Webpack无法正确解析导出项。

推荐解决方案:延迟设置Axios拦截器

不要在模块顶部直接导入store,而是将拦截器逻辑封装成函数,在Store初始化完成后再执行:

修改customAxios.js

import axios from "axios";
import { BASE_URL } from "./apiUrls";

export const customAxios = axios.create({ baseURL: BASE_URL });

// 封装拦截器设置函数,接收store作为参数
export const setupAxiosInterceptors = (store) => {
  customAxios.interceptors.request.use((config) => {
    // 根据你的Redux state结构调整token的获取路径
    const token = store.getState().auth.token;
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  });
};

在index.js中初始化拦截器

import { createRoot } from "react-dom/client";
import App from "./App";
import { Provider } from "react-redux";
import { BrowserRouter } from "react-router-dom";
import store from "./redux/store";
import { setupAxiosInterceptors } from "./customAxios";

// 先完成store初始化,再设置Axios拦截器
setupAxiosInterceptors(store);

const rootElement = document.getElementById("root");
const root = createRoot(rootElement);

root.render(
  <Provider store={store}>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </Provider>
);

备选方案:消除循环依赖

如果你的rootReducer内的切片(如auth切片)导入了customAxios做API请求,会形成store.js→rootReducer→切片文件→customAxios.js→store.js的循环链。

可以通过以下方式解决:

  • 将API请求逻辑从切片中抽离,避免切片直接依赖customAxios
  • 使用Redux Toolkit的RTK Query(推荐),它会自动处理请求头,无需手动维护Axios实例:
    import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
    import { BASE_URL } from './apiUrls';
    
    export const apiSlice = createApi({
      reducerPath: 'api',
      baseQuery: fetchBaseQuery({
        baseUrl: BASE_URL,
        prepareHeaders: (headers, { getState }) => {
          const token = getState().auth.token;
          if (token) {
            headers.set('Authorization', `Bearer ${token}`);
          }
          return headers;
        },
      }),
      endpoints: (builder) => ({
        // 定义你的API端点
      }),
    });
    
    之后将该API切片加入Store的reducer即可。

内容的提问来源于stack exchange,提问作者Abdus Samad 03

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:55:25