为什么我的React应用未导入React却没有抛出相关错误?
问题原因解答
这个现象是React 17及更高版本引入的全新JSX转换特性导致的,具体逻辑如下:
- React 17版本之前,所有JSX语法在编译时都会被转换为
React.createElement()调用,因此每个使用JSX的文件必须手动引入React对象,否则就会抛出'React' is not defined的运行时/校验错误。 - 从React 17开始,官方联合Babel、TypeScript等编译工具推出了新的JSX转换逻辑:编译时JSX不再被转为
React.createElement(),而是会自动从react/jsx-runtime中导入专用的jsx生成函数来构建元素,这一步导入操作是编译工具自动完成的,不需要开发者手动在文件头部引入React。
如果你是通过Create React App(CRA)初始化的项目,只要CRA版本在v4.0及以上,默认就开启了该新转换特性,因此你注释掉两个文件的React引入语句也不会触发报错。
内容的提问来源于stack exchange,提问作者Ritik Joshi
相关产品推荐
相关产品推荐

