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

React 16.2.0在IE9运行报错:'Set'或'Map'未定义如何解决?

解决React 16.2.0在IE9中出现'Set'或'Map' is undefined的问题

嘿,这个问题我太熟悉了!之前帮好几个开发者排查过类似的IE兼容性坑,原因其实很直白:

React 16及后续版本不再默认包含ES6特性的polyfill,而IE9作为非常老旧的浏览器,完全不支持Set、Map这些ES6原生对象——当React内部代码试图调用它们时,自然就会抛出"undefined"的错误。

下面是亲测有效的解决步骤:

  • 第一步:安装适配的polyfill包
    我们需要手动引入ES6特性的兼容补丁,推荐使用core-js@2版本(core-js@3对IE9的支持不够完善,和React 16.2的适配性更好)。在项目根目录执行安装命令:

    npm install core-js@2 --save
    # 或者用yarn
    yarn add core-js@2
    
  • 第二步:在入口文件顶部优先加载polyfill
    找到项目的入口文件(通常是src/index.js),一定要在引入React之前,先加载Set和Map的polyfill:

    // 先加载polyfill,确保React启动前这些对象已存在
    import 'core-js/es6/map';
    import 'core-js/es6/set';
    
    // 之后再引入React和业务代码
    import React from 'react';
    import ReactDOM from 'react-dom';
    import App from './App';
    
    ReactDOM.render(<App />, document.getElementById('root'));
    

    如果后续还遇到其他ES6特性的兼容性问题,也可以直接引入整个ES6的polyfill:import 'core-js/es6';,不过按需引入能让打包体积更小。

  • 额外配置(手动Webpack/Babel项目适用)
    如果你不是用Create React App而是自己配置的Webpack和Babel,需要确保Babel配置里开启polyfill支持。比如在.babelrc中添加:

    {
      "presets": [
        ["react", { "useBuiltIns": "entry" }]
      ]
    }
    

    这样Babel会帮你正确处理polyfill的引入逻辑。

完成这些步骤后重新打包项目,在IE9里运行应该就不会再出现这个错误了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:07