为何未显式使用React仍需导入React语句?
为什么移除
import React from 'react'会报错? 这是个非常典型的疑问,看起来你确实没在代码里显式写React.xxx,但问题出在JSX的底层转译逻辑上,咱们来理清楚:
核心原因:JSX会被转译为React.createElement调用
你写的JSX语法(比如<div>Hi</div>)并不是浏览器能直接识别的原生JavaScript,它需要通过Babel这类转译工具转换成普通JS代码。
举个例子,你的App组件代码:
const App = function(){ return <div>Hi</div> }
经过转译后,会变成这样:
const App = function(){ return React.createElement('div', null, 'Hi'); }
看到没?转译后的代码隐式依赖了React这个变量,如果没有提前通过import React from 'react'把它引入到当前模块中,运行时就会找不到React,从而抛出Uncaught ReferenceError: React is not defined的错误。
补充:React 17+的新变化
如果你使用的是React 17及以上版本,配合对应的新JSX转换工具,确实可以不用再手动导入React就能写JSX——因为新的转译逻辑会自动引入必要的辅助函数,不再依赖全局的React变量。但如果你的项目还是基于旧版转译配置(比如老版本的Create React App),就依然需要保留import React from 'react'语句。
内容的提问来源于stack exchange,提问作者kenshinji
相关产品推荐
相关产品推荐

