JSX 剥茧抽丝:从语法糖到 JavaScript 对象的演变之旅

0 阅读2分钟

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转译的结果: image.png

为什么我们离不开 JSX?

既然底层都是 JS 对象,我们为什么不直接写对象,非要用 JSX 呢?

1. 效率:从“搬砖”到“画图”

如果没有 JSX,你需要手动写嵌套极深的函数调用。想象一下,写一个 10 层的列表,代码会变成一团乱麻。JSX 让我们用声明式的方式写代码——你只需要告诉 React“我想要长成这样的 UI”,剩下的翻译工作交给工具。

2. 可读性:一眼看透 UI 结构

JSX 的树状结构与最终生成的页面结构完全一致。这种“所见即所得”的快感,让团队协作和代码维护变得异常轻松。

3. 安全性:自带“防弹衣”

JSX 在渲染前会默认转义所有输入。这意味着如果你尝试在内容里注入一段恶意的 <script> 脚本,JSX 会把它当成普通文本处理,从而天然防御了 XSS(跨站脚本)攻击


结语

JSX 是连接“开发者友好”与“机器高效”的桥梁。它用 HTML 的皮囊包裹着 JavaScript 的灵魂。下次当你写下 <Component /> 时,记住你其实是在写一份精密的 JS 说明书,而 React 正在幕后为你搭建那座华丽的数字大厦。