React 16是否必须导入React?未导入仍能运行的原因咨询
为什么React 16项目不导入React也能运行?
没错,你在HTML里引入的那个UMD格式的React脚本就是问题的答案。
当你通过<script>标签加载react.development.js这类UMD版本的React时,它会自动把React对象挂载到浏览器的全局window对象上。在React 16及更早版本中,JSX代码会被编译成React.createElement()调用——正常情况下,你需要在文件里导入React才能让这个调用生效,但因为全局window上已经存在React对象,编译后的代码能直接找到它,自然就不用手动导入了。
举个对比:
- 如果你用webpack、Vite这类构建工具的项目(一般用ES模块规范),React 16必须在每个使用JSX的文件顶部写
import React from 'react',因为这类环境里没有全局的React对象。 - 但通过UMD脚本引入时,全局变量已经就绪,就跳过了手动导入的步骤。
而React 17之后的版本,JSX的编译逻辑做了改动,会生成_jsx()这类不依赖全局React的调用,所以不管用哪种引入方式,都不需要手动导入React了。
内容的提问来源于stack exchange,提问作者Sam Porter
相关产品推荐
相关产品推荐

