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

升级Babel/Webpack后react-redux connect组件传递错误排查

解决react-redux connect装饰器配置导致的组件传递错误

问题核心

更新Babel和Webpack依赖后出现的Uncaught Error: You must pass a component to the function returned by connect错误,本质是装饰器编译逻辑和新版本依赖不兼容,导致connect没有拿到合法的React组件。

具体修复方案

1. 调整Babel装饰器配置

在项目的.babelrc或babel.config.js中,确保装饰器插件开启legacy模式,且和类属性插件的顺序正确:

module.exports = {
  presets: [
    '@babel/preset-env',
    '@babel/preset-react'
  ],
  plugins: [
    ['@babel/plugin-proposal-decorators', { legacy: true }],
    ['@babel/plugin-proposal-class-properties', { loose: true }]
  ]
};

重点:@babel/plugin-proposal-decorators必须放在@babel/plugin-proposal-class-properties之前,这是legacy模式的强制要求。

2. 检查Webpack的babel-loader配置

确保webpack配置里的babel-loader没有覆盖全局Babel配置,不要在loader内单独设置装饰器相关参数:

module: {
  rules: [
    {
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader'
        // 不要在这里额外配置decorators插件,让它读取根目录的Babel配置文件
      }
    }
  ]
}

3. 确认react-redux版本兼容

更新依赖后,检查react-redux版本是否和当前React版本匹配:

  • React 18+ 对应 react-redux ^8.0.0 及以上
  • React 17 可使用 react-redux ^7.2.0 及以上
    如果版本不匹配,执行npm install react-redux@合适版本升级或降级。

4. 排查业务代码中的装饰器写法

检查项目中使用@connect装饰器的组件,确保语法正确:

// 正确示例
@connect(mapStateToProps, mapDispatchToProps)
class MyComponent extends React.Component {
  // 组件逻辑
}

// 错误示例(需避免)
@connect()
// 这里存在空行或无关代码
class MyComponent extends React.Component {
  // 组件逻辑
}

验证步骤

  1. 删除node_modules和package-lock.json
  2. 重新执行npm install
  3. 先单独启动前端项目(不通过Spring Boot部署),确认控制台无报错
  4. 打包前端资源后,部署到Spring Boot中验证页面正常加载

内容的提问来源于stack exchange,提问作者Daniel Funes Fuentes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:36:14