React18、19如何兼容 IE9、IE10

首先我们需要为项目处理好babel和polyfill,这个我就不介绍了。

处理完babel和polyfill后,我们可以发现IE11就能运行了,IE10不能运行。这是怎么回事呢?调试一下,我们就能发现关键代码:

typescript 复制代码
function resolveUpdatePriority(): EventPriority {
  // ...
  const currentEvent = window.event;
  // IE11 is undefined, IE10 is null
  if (currentEvent === undefined) {
    return DefaultEventPriority;
  }
  return getEventPriority(currentEvent.type);
}

其中的window.event,由于IE10为null,IE11为undefined就导致IE10在后面的currentEvent.type报错了。

undefined和null有什么区别?

作为前端界的八股题,相信大家都学过:null的语义是"有意的空值 ",undefined的语义是"变量尚未被定义 "。在大多数情况下,如果一个特性还不支持,应当是undefined;如果支持这个特性,但是此时没有值,应当是nulldocument.currentScript就是一个很好的示例。

但是window.event是一个特例 ,因为window.event是IE先出的,后有的规范。如果把空值定为null,就会导致有现存的网站可能把新浏览器判定为IE,所以window.event的规范空值是undefined

因此我们在window.event判断时,使用window.event == null判断即可。但是React中window.event===undefined来判断也不能说它是错的。所以我们不改react源代码,而是通过polyfill来解决。

解决方案:注入 Polyfill

首先安装插件rollup-plugin-polyfill-injectrollup-plugin-polyfill-inject是一个专业的polyfill注入插件。

bash 复制代码
npm i -D rollup-plugin-polyfill-inject

然后配置插件,以下配置仅供参考,如果你的构建工具支持"按条件加载",可以配置只有低版本浏览器使用插件。

javascript 复制代码
polyfill({
    getter: {
        'window.event': "@/utils/getEvent"
    },
    include: [
        "**/node_modules/react-dom/**/*"
    ]
})

然后去编写src/utils/getEvent

javascript 复制代码
export default function getEvent() {
	return window.event || undefined;
};

最后我们构建后看看效果

果然成功了。

相关推荐
李燚1 天前
ReAct Agent 源码拆解:Eino 如何把 Graph 变成 Agent(第64篇-E50)
ai·agent·react·graph·multi-agent·aiagent·eino
zhoupenghui1682 天前
大模型核心技术ReAct和Agentic RAG讲解
人工智能·ai·大模型·react·rag·动态推理·agentic rag
夕夕木各4 天前
从第一个 PR 到 Vite 官方中文文档维护者
github·vite
人间凡尔赛5 天前
2026 年 React Server Components 完全指南:Next.js 16 全栈开发最佳实践
前端·typescript·react·全栈·next.js
布兰妮甜5 天前
从 0 搭建企业级 Vue3/Vite 脚手架(规范、eslint、husky、打包、环境变量全流程)
typescript·vue3·vite·脚手架·前端工程化
名字还没想好☜6 天前
React setState 连续调用「丢更新」排查:批量更新与函数式更新
前端·javascript·react.js·react·usestate
sugar__salt6 天前
DeepSeek-R1 WebGPU (1):在浏览器里跑大模型
react.js·reactjs·react·端模型
HexCIer7 天前
面向未来的原子化 CSS:UnoCSS 核心架构分析与 Tailwind CSS 现状
前端·css·vite
minhuan7 天前
大模型Agent核心架构,详解ReAct、Plan-and-Execute、Reason-Act-Observe循环21.6
react·大模型应用·agent架构·ai应用架构设计·plan-execute