React 从入门到出门第一章 JSX 增强特性与函数组件入门

作者:怕浪猫日期:2026/1/1

G9Sht3iaIAA1MIG.jpeg

今天咱们从 React 19 的基础语法入手,聊聊 JSX 增强特性和函数组件的核心用法。对于刚接触 React 19 的同学来说,这两块是搭建应用的基石——函数组件是 React 19 的核心载体,而 JSX 则让我们能以更直观的方式描述 UI 结构。

更重要的是,React 19 对 JSX 做了不少实用增强,比如支持多根节点默认不包裹、改进碎片语法等,这些特性能直接提升我们的开发效率。下面咱们结合具体案例,从“是什么→怎么用→为什么”三个维度,把这些知识点讲透~

一、先搞懂核心概念:函数组件与 JSX 是什么?

1. 函数组件:React 19 的“UI 构建单元”

函数组件,顾名思义就是用JavaScript 函数 定义的 React 组件。它的核心作用是:接收 props 数据,返回一段描述 UI 结构的 JSX 代码,最终被 React 渲染到页面上。

在 React 19 中,函数组件是绝对的主流——相比旧版本的 class 组件,它更简洁、更易维护,而且所有新特性(比如新 Hooks、Actions API 等)都优先适配函数组件。

2. JSX:JavaScript 与 UI 的“桥梁”

JSX 全称是 JavaScript XML,是 React 推出的一种语法扩展。它允许我们在 JavaScript 代码中直接写 HTML 风格的标签,既保留了 JavaScript 的逻辑表达能力,又具备 HTML 的直观性。

注意:JSX 并不是原生 JavaScript 语法,浏览器无法直接识别,需要通过 Babel 等工具转译为普通 JavaScript 代码后才能运行。不过在 React 19 项目中(比如用 Vite 或 Create React App 初始化的项目),这些转译工作会被工具链自动处理,我们直接写 JSX 即可。

二、函数组件入门:从“最简单的组件”开始写

咱们先从最基础的函数组件写起,掌握“定义→使用→传参”的完整流程。

1. 定义一个最简单的函数组件

一个函数组件的核心结构非常简单:就是一个返回 JSX 的函数。比如下面这个“Hello React 19”组件:

1// 定义函数组件:接收 props 参数(可选),返回 JSX
2function HelloReact19() {
3  // 组件内部可以写 JavaScript 逻辑
4  const message = "Hello React 19! 我是函数组件";
5  
6  // 返回 JSX:描述 UI 结构
7  return (
8    <div>
9      <h1>{message}</h1>
10      <p>这是我写的第一个 React 19 函数组件~</p>
11    </div>
12  );
13}
14
15// 使用组件:像用 HTML 标签一样使用
16function App() {
17  return (
18    <div className="App">
19      <HelloReact19 /> {/* 组件使用时必须闭合标签 */}
20    </div>
21  );
22}
23
24export default App;
25

2. 组件传参:通过 props 传递数据

如果我们想让组件更灵活(比如不同场景显示不同内容),就需要通过 props 给组件传递数据。props 是一个对象,包含了父组件传递过来的所有参数。

1// 接收 props 参数,使用解构赋值简化写法
2function Greeting({ name, age }) {
3  return (
4    <div>
5      <h2>你好,我是 {name}</h2>
6      <p>今年 {age} 岁,正在学习 React 19</p>
7    </div>
8  );
9}
10
11// 父组件传递 props
12function App() {
13  return (
14    <div className="App">
15      {/* 传递 name  age 两个参数 */}
16      <Greeting name="小明" age={22} />
17      <Greeting name="小红" age={21} />
18    </div>
19  );
20}
21

3. 组件嵌套:组合出复杂 UI

函数组件支持嵌套使用,我们可以把复杂的 UI 拆分成多个小组件,再组合起来,这也是 React “组件化”思想的核心。

比如我们要实现一个“用户卡片列表”,可以拆成 UserCard(单个用户卡片)和 UserList(卡片列表容器)两个组件:

1// 单个用户卡片组件
2function UserCard({ user }) {
3  const { name, avatar, desc } = user;
4  return (
5    <div style={{ border: "1px solid #eee", padding: "16px", borderRadius: "8px", margin: "8px" }}>
6      <img src={avatar} alt={name} style={{ width: "80px", height: "80px", borderRadius: "50%" }} />
7      <h3>{name}</h3>
8      <p>{desc}</p>
9    </div>
10  );
11}
12
13// 用户列表组件(嵌套 UserCard)
14function UserList() {
15  // 模拟用户数据
16  const users = [
17    {
18      name: "小明",
19      avatar: "https://via.placeholder.com/80",
20      desc: "React 19 学习者"
21    },
22    {
23      name: "小红",
24      avatar: "https://via.placeholder.com/80",
25      desc: "前端开发工程师"
26    }
27  ];
28  
29  return (
30    <div>
31      <h2>用户列表</h2>
32      {/* 循环渲染 UserCard 组件 */}
33      {users.map((user, index) => (
34        <UserCard key={index} user={user} />
35      ))}
36    </div>
37  );
38}
39
40// 根组件
41function App() {
42  return (
43    <div className="App">
44      <UserList />
45    </div>
46  );
47}
48

三、React 19 核心:JSX 增强特性详解

React 19 对 JSX 语法做了不少实用增强,解决了之前版本的一些痛点。下面咱们重点讲几个最常用的增强特性,结合案例说明用法和优势。

1. 特性 1:多根节点默认不包裹(无需手动写 Fragment)

在 React 18 及之前的版本中,JSX 要求必须有一个“唯一根节点”,如果想返回多个同级节点,需要用 <></>(Fragment 碎片)包裹。

而 React 19 支持“多根节点默认不包裹”,直接返回多个同级节点即可,编译器会自动帮我们处理为 Fragment,代码更简洁。

❌ React 18 及之前的写法(必须包裹)

1// React 18 及之前:多根节点必须用 Fragment 包裹
2function Navbar() {
3  return (
4    <> {/* 必须写 Fragment */}
5      <div className="logo">React 19 -logo</div>
6      <ul className="menu">
7        <li>首页</li>
8        <li>文档</li>
9      </ul>
10    </>
11  );
12}
13

✅ React 19 增强写法(无需包裹)

1// React 19:直接返回多根节点,无需手动写 Fragment
2function Navbar() {
3  return (
4    <div className="logo">React 19 -logo</div>
5    <ul className="menu">
6      <li>首页</li>
7      <li>文档</li>
8    </ul>
9  );
10}
11

注意:如果需要给多根节点添加 key(比如循环渲染时),还是需要显式写 ,因为简写的 <></> 不支持添加属性。

2. 特性 2:改进的 Fragment 语法与属性支持

React 19 对 Fragment 语法做了优化,除了支持默认不包裹,还允许给显式 Fragment 添加更多属性(之前版本仅支持 key)。比如我们可以给 Fragment 添加 className,用于样式控制:

1// React 19:Fragment 支持添加 className 等属性
2function UserInfo({ user }) {
3  return (
4    <Fragment className="user-info-container">
5      <p>姓名:{user.name}</p>
6      <p>邮箱:{user.email}</p>
7    </Fragment>
8  );
9}
10

这种写法在需要给一组同级节点统一添加样式或其他属性时非常实用,避免了额外嵌套 div 标签。

3. 特性 3:JSX 中直接使用 Promise(配合 use() Hook)

React 19 新增的 use() Hook 允许我们在 JSX 中直接处理 Promise 数据,无需额外写 useEffect 来监听 Promise 状态。这是 JSX 与数据处理结合的重要增强,简化了异步数据渲染逻辑。

示例:从接口获取用户数据并渲染

1import { use } from 'react';
2
3// 模拟接口请求:返回 Promise
4function fetchUser() {
5  return new Promise((resolve) => {
6    setTimeout(() => {
7      resolve({ name: "小明", age: 22 });
8    }, 1000);
9  });
10}
11
12// 组件中直接用 use() 处理 Promise
13function UserProfile() {
14  // use() 接收 Promise,返回 resolved 后的数据
15  const user = use(fetchUser());
16  
17  return (
18    <div>
19      <h2>用户信息</h2>
20      <p>姓名:{user.name}</p>
21      <p>年龄:{user.age}</p>
22    </div>
23  );
24}
25

这里需要注意:use() 只能在函数组件的顶层或自定义 Hook 中使用,不能在条件语句、循环或嵌套函数中使用(遵循 Hooks 的调用规则)。

4. 特性 4:JSX 注释语法优化

React 19 对 JSX 中的注释语法做了兼容优化,支持更直观的注释写法。之前的注释需要用 {/* 注释内容 */} 包裹,现在在某些场景下也支持 HTML 风格的<!-- 注释内容 -->(不过更推荐还是用 {/* */},兼容性更好)。

1function CommentDemo() {
2  return (
3    <div>
4      {/* React 推荐的注释写法(全版本兼容) */}
5      <h2>JSX 注释示例</h2>
6      <!-- HTML 风格注释(React 19 支持,不推荐在复杂场景使用) -->
7      <p>注释不会被渲染到页面上</p>
8    </div>
9  );
10}
11

四、JSX 与函数组件的核心注意事项

掌握了基本用法后,咱们再梳理几个容易踩坑的点,帮大家避开误区:

  1. JSX 中的属性名采用驼峰命名法:HTML 中的 class 要写成 classNamefor 要写成 htmlFor,避免与 JavaScript 关键字冲突。
  2. JSX 中嵌入 JavaScript 表达式用 {} :比如变量、函数调用、三元表达式等,但不能嵌入语句(if、for 等)。示例:{isShow ? <div>显示</div> : null}
  3. 函数组件的返回值必须是单个根节点或多根节点(React 19) :不能返回 undefined(比如忘记写 return 语句),否则会报错。
  4. 组件名必须以大写字母开头:React 通过首字母大小写区分组件和普通 HTML 标签。如果组件名小写,React 会把它当作 HTML 标签处理,导致渲染失败。

五、总结与下一步学习方向

今天咱们重点讲了 React 19 中 JSX 的增强特性和函数组件的基础用法:

  • 函数组件是 React 19 的核心载体,核心是“接收 props、返回 JSX”,支持嵌套和组合;
  • React 19 对 JSX 的增强(多根节点默认不包裹、Fragment 支持更多属性、配合 use() 处理 Promise 等)大幅提升了开发效率;
  • 掌握驼峰命名、表达式嵌入等注意事项,能帮我们避开大部分基础坑。

下一步,大家可以继续学习 React 19 的内置 Hooks(比如 useState、useEffect),这是实现组件状态管理和副作用处理的核心。后续我也会继续更新相关文章,敬请期待~

如果这篇文章对你有帮助,欢迎点赞、收藏、转发~ 有任何问题也可以在评论区留言交流~


React 从入门到出门第一章 JSX 增强特性与函数组件入门》 是转载文章,点击查看原文


相关推荐


数据挖掘12
upper20202025/12/22

数据挖掘12 – 零样本分类 一、预备知识 1.底层特征(Low-level Features) 底层特征是从原始输入数据中直接提取的、最基础的、通常不具有明确语义含义的数值或信号特征。 例子(以图像为例): 像素强度(灰度值、RGB值) 2.中层属性(Mid-level Attributes / Mid-level Features) 中层属性是在底层特征基础上进一步组合、聚合或抽象得到的具有一定结构或局部语义的特征。它们比底层特征更接近人类可理解的概念,但尚未达到高层语义(如“猫”、“汽车”


JConsole 中 GC 时间统计的含义
千百元2025/12/14

要理解 JConsole 中 GC 时间统计的含义,需结合 垃圾收集器类型​ 和 统计维度​ 拆解: 1. 关于 PS MarkSweep 上的 12.575 秒 (16 收集) PS MarkSweep:是 JVM 中用于清理 老年代(PS Old Gen)​ 的垃圾收集器(属于 Full GC 收集器,触发时会暂停所有应用线程,即 STW)。 16 收集:表示该收集器 总共执行了 16 次 Full GC。 12.575 秒:这 16 次 Full GC 的 总耗


程序员从大厂回重庆工作一年
uzong2025/12/6

从大厂裸辞回重庆工作,整整一年了。 时间快得让人心惊。停下回望,从裸辞、归乡、求职到适应,再到角色转换,种种心绪,感慨颇多。 一、离开时,那句话成了种子 最后一个工作日的下午,领导把我叫到楼道,做了一次临别交谈。 他有一句话,我至今记得清清楚楚:“以后出去,一定要想办法走向管理岗位,那是完全不同的竞争力。” 当时只是记下。一年后的今天,当我开始带领一个小团队时,这句话突然在心里发了芽。 它像一颗提前埋下的种子,在合适的时节悄然生长。 二、裸辞回渝:一场恰如其分的“任性” 回重庆是裸辞的。所有


Python微服务架构在分布式电商系统中的高性能设计与实战经验总结分享
2501_941810832025/11/28

在大型电商系统中,用户请求量巨大、数据访问密集、服务链路复杂,要求系统具备高响应速度、高并发吞吐能力与稳定扩展性。Python 凭借开发效率高、生态完善与易维护特性,越来越多被用于电商系统的接口层、交易逻辑层、库存管理、推荐系统以及风控服务。本文结合实战电商系统落地经验,分享 Python 在分布式微服务架构中的模块划分、性能调优、服务治理与高并发优化,为开发者提供可落地的架构经验参考。 一、Python 架构选型思路 在传统单体架构中,全站服务聚合在同一进程中,随着并发量增长,性能和可维


PHP 8.5 #[\NoDiscard] 揪出“忽略返回值“的 Bug
catchadmin2026/1/9

PHP 8.5 #[\NoDiscard] 揪出"忽略返回值"的 Bug 有些 bug 会导致异常、致命错误、监控面板一片红。 还有一类 bug 长这样:“一切都跑了,但什么都没发生”。方法调了,副作用也有了,但关键返回值(成功标志、错误列表、新的不可变实例)被扔掉了。粗看代码没毛病,测试没覆盖到边界情况也能过。bug 就这么混进生产环境。 PHP 一直允许这种风格的失误: doSomethingImportant(); // 返回了一个值……但没人用 PHP 8.5 新增了一种原生


Vercel React 最佳实践 中文版
ssshooter2026/1/17

React 最佳实践 版本 1.0.0 Vercel 工程团队 2026年1月 注意: 本文档主要供 Agent 和 LLM 在 Vercel 维护、生成或重构 React 及 Next.js 代码库时遵循。人类开发者也会发现其对于保持一致性和自动化优化非常有帮助。 摘要 这是一份针对 React 和 Next.js 应用程序的综合性能优化指南,专为 AI Agent 和 LLM 设计。包含 8 个类别的 40 多条规则,按影响力从关键(消除瀑布流、减少打包体积)到增量(高级模式)排序。每


墨梅博客 1.2.0 发布与 AI 开发实践 | 2026 年第 4 周草梅周报
草梅友仁2026/1/25

本文在 草梅友仁的博客 发布和更新,并在多个平台同步发布。如有更新,以博客上的版本为准。您也可以通过文末的 原文链接 查看最新版本。 前言 欢迎来到草梅周报!这是一个由草梅友仁基于 AI 整理的周报,旨在为您提供最新的博客更新、GitHub 动态、个人动态和其他周刊文章推荐等内容。 开源动态 本周依旧在开发 墨梅 (Momei) 中。 您可以前往 Demo 站试用:demo.momei.app/ 您可以通过邮箱 admin@example.com,密码momei123456登录演示用管理

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客