JSX 到底是什么?
它不是字符串,也不是 HTML,而是 React.createElement(或新的 JSX Transform)的语法糖。
在运行过程中会通过jsxProd函数转为createElement实现的js对象
编译流程:Babel 的“翻译艺术”
既然浏览器看不懂 JSX,我们就需要一个翻译官。这个翻译官就是 Babel。
当你写下这段代码:
JavaScript
function Welcome() {
return (
<div className='container'>
<p>Hello World</p>
</div>
)
}
Babel 会在后台把它“翻译”成这样:
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
function Welcome() {
return _jsx("div", {
className: 'container',
children: _jsx("p", { children: "Hello World" })
});
}
babel转译的结果:
为什么我们离不开 JSX?
既然底层都是 JS 对象,我们为什么不直接写对象,非要用 JSX 呢?
1. 效率:从“搬砖”到“画图”
如果没有 JSX,你需要手动写嵌套极深的函数调用。想象一下,写一个 10 层的列表,代码会变成一团乱麻。JSX 让我们用声明式的方式写代码——你只需要告诉 React“我想要长成这样的 UI”,剩下的翻译工作交给工具。
2. 可读性:一眼看透 UI 结构
JSX 的树状结构与最终生成的页面结构完全一致。这种“所见即所得”的快感,让团队协作和代码维护变得异常轻松。
3. 安全性:自带“防弹衣”
JSX 在渲染前会默认转义所有输入。这意味着如果你尝试在内容里注入一段恶意的 <script> 脚本,JSX 会把它当成普通文本处理,从而天然防御了 XSS(跨站脚本)攻击。
结语
JSX 是连接“开发者友好”与“机器高效”的桥梁。它用 HTML 的皮囊包裹着 JavaScript 的灵魂。下次当你写下 <Component /> 时,记住你其实是在写一份精密的 JS 说明书,而 React 正在幕后为你搭建那座华丽的数字大厦。