JSX(JavaScript XML) 是 React 中用来 写 HTML 结构 的一种语法,它允许你在 JavaScript 代码中直接写 HTML 代码。
在普通 JavaScript 里,你可能会这样写:
const element = document.createElement("h1");
element.textContent = "Hello, world!";
document.body.appendChild(element);
但是,在 JSX 里,你可以像写 HTML 一样:
const element = <h1>Hello, world!</h1>;
然后用 React 渲染:
import React from "react";
import ReactDOM from "react-dom";
const element = <h1>Hello, world!</h1>;
ReactDOM.createRoot(document.getElementById("root")!).render(element);
注意:JSX 代码 最终会被编译成 JavaScript,并不会直接执行。
JSX 和 HTML 很像,但它是 JavaScript 扩展语法,有一些不同点:
| HTML | JSX(React) | 说明 | 
|---|---|---|
| class="title" | className="title" | JSX 里 class变成className | 
| onclick="handleClick()" | onClick={handleClick} | 事件属性 要用 {}括起来 | 
| <input disabled> | <input disabled={true} /> | 布尔值 必须用 {} | 
| style="color: red;" | style={{ color: "red" }} | 行内样式 用对象 {} | 
| <img src="logo.png"> | <img src={logo} /> | 动态属性 需要 {} | 
JSX 其实是 React.createElement() 的语法糖,
例如:
const element = <h1>Hello, world!</h1>;
最终会被转换成:
const element = React.createElement("h1", null, "Hello, world!");
然后 React 会 把它变成真正的 DOM。
JSX 允许你在 {} 里面写 JavaScript 表达式,比如:
const name = "Alice";
const element = <h1>Hello, {name}!</h1>;
或者:
const user = { name: "Bob", age: 25 };
const element = <p>姓名: {user.name}, 年龄: {user.age}</p>;
但不能写 if 语句、for 循环,只能写 表达式:
const isLoggedIn = true;
const element = <p>{isLoggedIn ? "已登录" : "请登录"}</p>;
必须有一个根元素:
return (
  <div>
    <h1>标题</h1>
    <p>内容</p>
  </div>
);
不能这样:
return ( <h1>标题</h1> <p>内容</p> // ❌ 这里会报错 );如果不想多包裹
div,可以用 Fragment:return ( <> <h1>标题</h1> <p>内容</p> </> );
HTML 属性要用 camelCase:
<button onClick={handleClick}>点击</button>
用 {} 写 JavaScript 代码:
const name = "React";
return <h1>Hello, {name}!</h1>;
CSS class 改成 className:
<h1 className="title">标题</h1>
行内样式要用对象:
<h1 style={{ color: "red", fontSize: "20px" }}>标题</h1>
React.createElement()  {} 语法写 JavaScript 代码  className、onClick  这样,React 代码就比普通 JavaScript 更简洁、更可读!