JSX 是一种语法扩展,允许你在 JavaScript 中编写类似 HTML 的标记。浏览器不理解 JSX — 编译器(Babel、SWC、esbuild)在代码运行之前将其转换为常规函数调用。
它编译成什么
jsx
const el = <h1 className="title">Hi {name};
el = .(
,
{ : },
, name
);
结果是一个普通的 JavaScript 对象("React 元素"),它描述 UI — 还不是真实的 DOM 节点。React 读取该对象来构建虚拟 DOM。
function Card({ user }) {
return (
<> {/* Fragment: one root without an extra <div> */}
<h2 className="name">{user.name}</h2> {/* camelCase: className, not class */}
{user.isAdmin && <Badge />} {/* {} embeds any JS expression */}
</>
);
}
className、onClick),因为它们映射到 JS,而不是 HTML。{ } 嵌入表达式(值、三元运算符、.map()),但不能是 if 这样的语句。JSX 只是 createElement 的语法糖,所以你在 JSX 中能做的任何事你都能用纯 JS 做 — 它只是让 UI 代码看起来像它产生的标记,这比嵌套函数调用可读性高得多。