跳到主要内容

JSX

React 中,JSX 本质是 React.createElement() 函数的语法糖。它提供了一种更简洁、更直观的方式来描述 UI 结构,最终会被编译(通常是通过 Babel )成纯 JavaScript 代码。

一、 JSX 是什么

  • 类 XML 的 JavaScript 语法扩展
  • 允许在 JS 中编写类似 HTML 的标记
  • 非标准语法,需要编译转译

二、 编译

const element = <div className="greeting">你好,Tom!</div>;

三、底层实现

React.createElement() 接收三个参数:

  • 组件/标签名(字符串或函数组件)
  • 属性对象(props)
  • 子元素(可多个)

返回 React Element 对象(普通 JS 对象,描述 UI 结构)

转译后大概长这样
const element = {
type: 'div',
props: {
className: 'greeting',
children: '你好,TOM!',
},
};
特性说明
不是模版语言完整地 JavaScript 表达式能力(可嵌入变量、表达式、函数调用)
必须引入 React即使使用 JSX 也需要导入 React
组件即函数自定义组件的本质就是返回 JSX 的函数/类
编译时转换开发环境需配置 Babel 插件(如 @babel/preset-react

四、JSX 的限制

  • 必须有唯一的根元素(可用 <></><div></div> 包裹)
  • 标签名不能是数字开头
  • 需闭合所有标签(包括自闭合的标签)

五、为什么需要 JSX

  • 声明式编程:直观描述 UI 应该是什么样
  • 类型安全:编译时检测语法错误
  • 开发效率:使用 JSX 要比使用 React.createElement() 更高效
  • JS 全能力:可直接在标记中使用任意 JS 表达式
  • 可读性强:比纯 JS 函数更直观
  • 工具支持好:编辑器高亮、自动补全