React中JS与JSX文件的区别是什么?实操未发现差异求解答
其实本质上二者的核心差异是约定用途+语法支持,你没感觉到区别大概率是项目工具链做了兼容配置,下面拆解具体不同:
扩展名的约定作用
.js是标准JavaScript文件的通用扩展名,用来存放纯JS逻辑、工具函数、配置代码等;.jsx是React生态的约定扩展名,专门用来标识文件里包含JSX语法(就是那种类HTML的标签写法),团队协作时看到这个扩展名就知道这是React组件相关文件,不用打开就清楚用途。语法与转译差异
JSX文件里可以直接写<div>{state.name}</div>这种JSX语法,而标准.js文件默认不支持——如果没配置工具链,直接在.js里写JSX会报错。工具链(比如Babel、Vite、Webpack)会识别.jsx扩展名,自动把JSX语法转译成React.createElement()的调用代码,比如:
JSX代码:function Greeting() { return <h1>Hello React</h1>; }转译后等价的JS代码:
function Greeting() { return React.createElement('h1', null, 'Hello React'); }如果你在项目里能在
.js文件写JSX不报错,是因为项目配置了让工具链对.js文件也做JSX转译,但这是兼容配置,不是二者本身没区别。编辑器与工具的差异化支持
主流IDE(VS Code等)会根据扩展名提供不同的语法高亮和智能提示:.jsx文件会触发React组件的专属提示(比如props补全、JSX语法校验),而.js文件默认只会提供普通JavaScript的提示,除非手动配置关联React语法。
总结一下:.jsx是React生态用来区分组件文件和纯JS文件的约定,核心是标识文件包含JSX语法,工具链和编辑器会基于这个约定提供针对性支持;.js是通用JS文件,默认不支持JSX,全靠项目配置兼容。
内容的提问来源于stack exchange,提问作者bahram saraf zadeh

