# React 19 官方最新稳定版 简介 与 项目创建

TIP

本章是 React 学习的起点,将带你从零开始认识 React 并搭建第一个 React 项目。通过本章的学习,你将掌握以下内容:

  • 学习 React 需要具备哪些基础知识
  • 为什么要学习 React:通过原生 JS 与 React 的对比,理解 React 在 DOM 操作、数据驱动视图、性能优化和组件化开发方面的核心优势
  • React 简介与发展史:了解 React 是什么、React 库与 React 框架的区别,以及 React 从诞生至今的发展历程
  • Vite 构建 React 项目:学会使用 Vite 脚手架快速创建 React 项目,熟悉项目的目录结构、配置文件及启动流程
  • 命令式与声明式编程:理解两种编程范式的区别,掌握 React 声明式编程的核心思想与优势

# 一、学习 React 需要具备哪些基础知识

TIP

学习 React 之前,你需要具备以下基础知识:

  • 熟练掌握 HTML5 + CSS3
  • 熟练掌握 JavaScript + ES6 (核心逻辑,尤其是数组方法、箭头函数、解构、模块化、Promise)
  • HTTP协议 + Axios 网络请求
  • 了解 Node.js 中的 npm 包管理工具
  • Vite 构建工具 (了解Vite 构建项目流程)

如果你具备了以上基础,那你就可以正式进入 React 框架的学习了。

# 二、为什么要学习 React 框架

TIP

在学习 React 框架前,我们必须搞懂一个问题:为什么需要学习 React 框架?

难道没有 React 框架,仅凭我们前面学习过的 HTML5+CSS3+JS+HTTP 协议+Ajax(或 fetch),不能与后端配合开发一个完整的 Web 应用吗?

答案显然是 可以的

那为什么我们还需要学习 React 框架呢?接下来,我们就从 "没有 React" 和 "有了 React" 两种方式的对比来回答这个问题。

# 1、没有 React 框架,我们是怎么开发的?

TIP

在没有 React 框架的情况下,我们配合后端开发一个 Web 应用,典型的工作流程是:

  • 1、编写页面:用 HTML + CSS 构建页面结构和样式
  • 2、请求数据:通过 Ajax(或 fetch)向后端 API 发送请求,获取 JSON 数据
  • 3、手动操作 DOM 渲染数据:拿到数据后,用 JS 手动操作 DOM(document.getElementById、innerHTML等),将数据渲染到页面中
  • 4、手动同步数据与视图:当用户操作导致数据变化时(如点击按钮、输入内容),需要手动找到对应的 DOM 节点,更新它的内容或状态

一句话总结: 开发者既要关心"数据是什么",又要关心"DOM 怎么改",两头都得管。

# 1.1、示例:一个待办事项列表

<div id="app">
    <h2>待办事项</h2>
    <button id="addBtn">添加</button>
    <ul id="taskList"></ul>
</div>

<script>
    // 模拟数据,正常是要axios 或 fetch 发请求给后端获取初始数据
    const tasks = [
        {
            id: 1,
            text: "学习React",
        },
        {
            id: 2,
            text: "健身1小时",
        },
    ];

    // 获取 DOM
    const taskList = document.getElementById("taskList");
    const taskInput = document.getElementById("taskInput");
    const addBtn = document.getElementById("addBtn");
    let html = ""; // 用于拼接列表字符串
    renderList();
    // 渲染列表
    function renderList() {
        // 每次清空列表
        html = "";
        tasks.forEach((item) => {
            html += `<li>${item.text}</li>`;
        });
        taskList.innerHTML = html;
    }

    // 添加一条新任务
    addBtn.addEventListener("click", () => {
        // 获取输入的值
        const value = taskInput.value.trim();
        if (value) {
            tasks.push({ id: tasks.length, text: value });
        }
        // 手动重新渲染任务列表
        renderList();
    });
</script>

GIF2026-4-1221-58-40

传统方式开发的缺点

  • 直接使用 DOM API 操作界面,代码繁琐,效率较低
  • 数据变化后,需要手动查找 DOM 元素并更新内容,容易遗漏或出错,维护成本高
  • 频繁操作 DOM 会导致页面频繁重绘与重排,性能较差。(每次数据更新,整个 ul 列表全部重建
  • 缺乏组件化机制,代码难以复用,相同功能只能复制粘贴。( 如果需要两个地方渲染任务列表,只能手动复制代码)

# 2、有了 React 框架,开发方式有什么不同?

TIP

有了 React 框架后,开发流程变成了:

  • 1、编写页面:用 JSX(书写像 HTML一样)+ CSS 描述页面"长什么样"
  • 2、请求数据:同样通过 Ajax(或 fetch)向后端请求数据
  • 3、只管数据,不管 DOM:拿到数据后,只需要把数据交给 React,React 自动将数据渲染到页面中。当数据变化时,React 自动计算出哪些地方需要更新,并高效地更新对应的 DOM

一句话总结: 开发者只需要关心"数据是什么",DOM 怎么改交给 React 自动处理。

# 2.1、示例:一个待办事项列表

import { useState } from "react";
// import List from "./components/List.jsx";

export default function App() {
    // 模拟初始任务列表数据,正常发请求获取
    const [tasks, setTasks] = useState([
        {
            id: 1,
            text: "学习React",
        },
        {
            id: 2,
            text: "健身1小时",
        },
    ]);

    const addTask = () => {
        setTasks([...tasks, { id: tasks.length + 1, text: "看电影" }]);
    };

    return (
        <div>
            <h2>待办事项</h2>
            <button onClick={addTask}>添加</button>
           {/* <List tasks={tasks} /> */}
            <ul>
                {tasks.map((task) => (
                    <li key={task.id}>{task.text}</li>
                ))}
            </ul>
        </div>
    );
}

// 可以将 ul 抽出去做成  UI 组件复用
export default function List({ tasks }) {
  return (
    <ul>
      {tasks.map((task) => (
        <li key={task.id}>{task.text}</li>
      ))}
    </ul>
  );
}

GIF2026-4-1221-55-48

React 框架开发的优点

  • 开发者只需描述 UI 与数据的关系(声明式编程),无需手动操作 DOM,代码更直观、简洁。
  • 开发者只需关注数据状态,数据变化后,框架自动更新 UI。
  • 基于虚拟 DOM 与 Diff 算法,计算最小更新集,批量更新真实 DOM,自动优化渲染性能。(新增数据时,只会在后面添加一个 li 不会重新渲染整个 ul )
  • 将 UI 拆分为独立、可复用的组件,轻松实现界面逻辑的复用。( 如果)

# 3、总结:React 框架的优势

对比维度 原生 JS React 框架
DOM 操作 直接使用 DOM API 操作界面,代码繁琐,效率较低 开发者只需描述 UI 与数据的关系(声明式编程),无需手动操作 DOM,代码直观、简洁
更新机制 数据变化后需手动查找 DOM 并更新,易遗漏或出错,维护成本高 只需关注数据状态,框架自动更新 UI
性能优化 频繁操作 DOM 导致页面频繁重绘与重排,性能较差 基于虚拟 DOM + Diff 算法,计算最小更新集,批量更新,性能高
UI 复用 缺乏组件化机制,代码难以复用,相同功能只能复制粘贴 将 UI 拆分为独立、可复用的组件,轻松实现逻辑复用

React 五大核心特点

特点 说明
声明式编程 描述 UI 最终状态,由框架处理变化过程
组件化开发 UI 拆分为独立组件,高内聚低耦合
高效的性能 虚拟 DOM + Diff 算法,减少真实 DOM 操作
响应式数据 数据变化自动触发视图更新
跨平台开发 使用 React Native 可开发 iOS 和 Android 原生应用

# 4、总结

TIP

  • 没有 React 框架,你当然可以用 HTML5+CSS3+JS+Ajax 与后端配合开发 Web 应用,但你需要花费大量时间在手动 DOM 操作和数据与视图的同步上,随着项目复杂度的增加,代码会变得越来越难以维护。

  • 有了 React 框架,你只需要关注数据本身,告诉 React 界面"长什么样",React 会自动、高效地帮你完成 DOM 的更新。这样,你就可以把更多的精力放在业务逻辑上,而不是繁琐的 DOM 操作上。

这就是我们要学习 React 框架的原因——它解放了我们的生产力,让前端开发更高效、更优雅、更易维护。

# 5、前端三大主流框架

TIP

Vue、React、Angular 它们是目前前端开发中最流行的三个框架/库,各有特点:

React

  • 由 Facebook 开发维护
  • 本质是 UI 库(不是完整框架)
  • 特点:虚拟DOM、JSX 语法、单向数据流
  • 生态丰富,需要搭配路由、状态管理等库(如 React Router、Redux)
  • 适合:中大型项目、需要高度灵活性的场景

Vue

  • 由 尤雨溪 创建
  • 渐进式框架(可逐步引入)
  • 特点:模板语法简洁、双向数据绑定、组合式 API
  • 官方生态完善(Vue Router、Pinia/Vuex)
  • 适合:中小型项目到大型项目,学习曲线相对平缓

Angular

  • 由 Google 开发维护
  • 完整的 MVC 框架(开箱即用)
  • 特点:TypeScript 编写、依赖注入、RxJS 响应式编程、指令系统
  • 包含路由、HTTP 客户端、表单处理等内置功能
  • 适合:大型企业级应用,学习曲线较陡

# 5.1、简单对比

特性 React Vue Angular
类型 库 渐进式框架 完整框架
学习难度 中等 较低 较高
性能 优秀 优秀 优秀
国内流行度 高 很高 中等
国外流行度 很高 中等 高

国内流行度对比

在国内,很多初学者会先学 Vue,因为上手快、中文生态好、中小公司岗位多,能比较快地找到第一份工作。

有了 Vue 的基础后,再学 React 会轻松不少(组件化、工程化思想相通),所以工作后再补 React 是性价比很高的选择。 目前国内 Vue 开发者数量确实更多,但中大型公司、复杂项目往往更倾向 React。

“Vue + React 都会” 的人在求职和团队协作中确实更有优势,尤其是当你需要跨项目支持或晋升高阶岗位时。

总结:Vue 帮你快速入行,React 帮你走得更远。两者都会,上限更高。

# 三、React 简介与发展史

TIP

深入浅出 React 框架的前世今生,带你快速入门 React 开发。

# 1、React 是什么

TIP

React 是一个用于构建 Web 和原生应用界面的 JavaScript 库,由 Facebook 开发并维护。它采用声明式、组件化的编程模型,让 UI 开发更高效、可维护。

  • React 中文官网:https://zh-hans.react.dev (opens new window)
  • React 英文官网:https://react.dev (opens new window)
  • Web 应用界面:指在浏览器里运行的 HTML/CSS/JS 界面(如网页、管理后台)。简单来说,你可以用 React 来创建网页项目。
  • 原生应用界面:指在手机上运行的 App 界面。通过 React Native 框架,你可以用相同的 JavaScript 和 React 组件来构建 iOS 和 Android 原生应用,无需分别学习两套原生开发语言。
  • 库:库(Library)是一组预写好的代码集合,用于帮助开发者完成特定任务。React 库就是用 JavaScript 编写的一套专门用来构建和管理 UI 的工具函数。

关于什么是声明式、组件化的编程模型,我们后面再给大家介绍。

# 2、React 库 与 React 框架的区别

TIP

我们先用一个比喻来理解库和框架的区别:

  • 库(Library)就像一个工具箱。你需要锤子就拿锤子,需要扳手就拿扳手,用什么、怎么用完全由你决定。
  • 框架(Framework)就像一个毛坯装房。房子的结构、水电走线都已经规划好了,你只需要按照它的规范来添置家具和装饰。

React 本身只是一个专注于构建 UI 的库,它只负责"怎么把界面画出来"这一件事。所以严格来说,React 是一个库,而不是框架。

那我们为什么总说 "学 React 框架" 呢 ?

因为光靠 React 库本身,是无法完成一个真正的项目的。一个完整的项目还需要:

能力 对应工具
项目搭建 Vite 脚手架
页面跳转 React Router(路由)
数据共享 Redux / Zustand(状态管理)
接口请求 Axios(数据获取)
界面美化 Ant Design / Element Plus(UI 组件库)

注:

所以,我们常说的 "React 框架" 并不是指 React 库本身,而是指以 React 库为核心,搭配路由、状态管理、数据获取、UI 组件库等工具,通过脚手架搭建起来的一整套前端开发环境。

# 3、React 作者与发展史

TIP

  • 2011 年:Jordan Walke(Facebook工程师)创建了React的最初版本,名为“FaxJS”
  • 2012 年:Tom Occhino将React从“FaxJS”改名为“React”
  • 2013 年:Facebook决定将React开源,使其能够被更广泛的开发者使用和贡献
  • 2015 年:Facebook发布了React Native,这是一个使用 React 构建原生移动应用的框架。React Native的发布使得开发者可以使用React的编程模型和技术来构建跨平台的移动应用,从而大大简化了移动应用的开发过程。
  • 2016 年:React成为主流的开发框架,被越来越多的开发者所采纳和使用。
  • 2017 年:React团队开始着手解决性能问题,并开始了数年的重构工作。这一年,React引入了Fiber架构,为后续的性能优化打下了基础。
  • 2019 年:Sophie Alpert 和 Dan Abramov 在 2018 年 React Conf 上首次公开介绍了 Hooks,这是一种替代 Class 组件的函数式解决方案。Hooks 的引入提供了更简单、更具可重用性的代码编写方式,进一步提升了 React 的开发效率。2019 年 2 月发布了 React 16.8 版本,正式支持 Hooks。
  • 2020 年:React 17 正式发布(2020年10月20日)。这是一个“渐进式”的过渡版本,没有引入重大新特性,主要为后续的并发渲染做铺垫。主要改进包括:事件委托重构(从绑定到 document 改为绑定到 root 节点,提升微前端兼容性)、新 JSX 转换(无需再手动 import React)。
  • 2022 年:2022年3月29日发布了 React 18 版本。这是 React 发展史上的里程碑式更新,核心引入了并发渲染(Concurrent Rendering)——一种可中断、可恢复的渲染机制。
  • 2024 年:2024年12月5日发布了 React 19 版本。这是 React 在并发模式基础上的又一次重大升级,标志着 React 正从 UI 库向全栈开发框架演进。
    • Actions:统一处理异步状态,自动管理 pending、error 等状态,简化表单和数据提交逻辑
    • React Compiler(曾用名 React Forget):自动对组件进行 useMemo 和 useCallback 级别的性能优化,大幅减少手动优化的代码量
    • Server Components(稳定版) :服务端组件在 React 19 中正式稳定,支持组件在服务端渲染后发送给客户端,减少客户端 bundle 体积
    • 内置元数据管理:可直接在组件中编写 <title>、<meta> 等标签,无需第三方库
    • ref 作为 prop:不再需要 forwardRef,ref 可直接作为组件 prop 传递
  • 2025年及以后:React 19 发布后持续迭代,截至目前最新稳定版为 19.2.4(2026年1月26日发布)

# 四、Vite 构建 React 项目

TIP

在开始之前,我们先简单了解一下为什么要选择 Vite 作为 React 项目的构建工具。

传统构建工具的问题

早期的 React 项目通常使用 Create React App 来初始化,但随着项目规模的增长,CRA 暴露出一些问题:

  • 启动慢:项目越大,开发服务器启动时间越长
  • 热更新慢:修改代码后的热更新需要等待几秒甚至更久
  • 依赖重:需要预先打包整个应用,消耗大量内存

# 1、Vite 的优势

Vite(法语意为"快速")是一个新一代的前端构建工具,由 Vue.js 作者尤雨溪开发

它通过以下方式解决了传统工具的问题:

特性 说明
⚡ 极速启动 利用浏览器原生 ES Module 支持,无需打包即可启动
🔥 快速热更新 基于 ESM 的 HMR,修改代码后即时生效
📦 按需编译 只编译当前页面需要的模块,大型项目依然快速
🛠️ 开箱即用 支持 TypeScript、JSX、CSS 预处理器等常见需求

如果对于 vite 工具不了解的同学,可以看我讲过的 Vite 教程学习

# 2、Vite 构建项目的前置要求

使用 Vite 创建 React 应用,需要有 Node.js 环境,版本需要 18+ 或 20+。部分模板需要更高版本的 Node.js,当包管理器发出警告时,请注意升级你的 Node 版本。

在 vscode 命令终端,执行以下命令检查 Node.js 版本

# 检查 Node.js 版本
node -v
# 建议输出:v18.x.x 或 v20.x.x

# 3、使用 Vite 创建 React 项目

以下官方给出的利用 vite 创建 React 项目的命令 (opens new window),这个命令是一步到位,指定项目名、框架、语言

# my-app  项目名
# --template react-ts 指定项目采用 react 框架 + TypeScript 语言
npm create vite@latest my-app -- --template react-ts

作为初学者,我们一开始不采用 TS来编写,我们可以选择以下方式创建 React 项目,这样我们可以根据自己的需要选择。

# 3.1、第一步

执行以下 npm 命令,使用 Vite 脚手架创建项目

npm create vite@latest   # 使用Vite脚手架创建项目

# 3.2、第二步

以上命令执行后,然后按交互提示选择

  • 项目名 : my-app
  • 框架:React
  • 变体(语言):JavaScript 或 TypeScript

image-20260408122111176

# 3.3、第三步

项目创建好后,会在命令行显示项目的访问地址,如下图

image-20260408122332294

按住 Ctrl + 点击网址 即可在浏览器中打开项目,显示效果如下:

image-20260408122529543

到这一步,你成功的利用 Vite 创建了 React 项目。

如果你后续想要退出项目然后再重启项目,可以按步骤 4 和 5 操作

# 3.4、第四步

按住 Ctrl + C 退出当前项目

image-20260408131338456

# 3.5、第五步

执行以下命令,进入 React 项目根目录,然后在开发环境下启动 React 项目

cd my-app    # 进入创建好的 React 项目根目录
npm run dev	 # 开发环境下启动 React 项目

image-20260408131523709

npm run dev执行后,在命令行显示项目的访问地址

image-20240407184843478

按住 Ctrl + 点击 即可在浏览器中打开项目,显示效果如下:

# 4、package.json文件

TIP

重点关注 package.json 文件中的如下配置:

  • scripts 中的脚本命令,了解如何启动项目,并预览项目
  • dependencies 中的生产环境依赖包
依赖包 说明
react React库的核心包,我们开发时经常要用到这个包提供的方法和hooks
react-dom 专门负责把 react 生成的虚拟 DOM 渲染到浏览器 Web 环境的实际 DOM 中。
{
    "name": "my-app",  // 项目名称,通常是唯一标识符 
    "private": true,  // 标记该项目为私有,不会在npm等公共仓库中发布
    "version": "0.0.0",  // 项目的版本号,用于标识项目的迭代和变更
    "type": "module",   // 声明该项目使用 ES  Module 模块系统
    "scripts": {// 项目的脚本命令,可以通过npm run <script-name>来运行
        "dev": "vite", // 开发环境命令,使用vite启动开发服务器
       "build": "vite build",// 构建生产环境命令
       "lint": "eslint .",// 使用 ESLint 对项目进行代码检查
        "preview": "vite preview" // 预览生产环境构建产物
    },
    "dependencies": { // 项目依赖的生产环境包
        "react": "^19.2.4", // React 核心库
        "react-dom": "^19.2.4" // React的 DOM 操作库
    },
    "devDependencies": {// 项目开发时依赖的包,不会打包进生产环境
        "@eslint/js": "^9.39.4", // ESLint 的 JavaScript 核心规则集
        "@types/react": "^19.2.14", // React的TypeScript类型定义
        "@types/react-dom": "^19.2.3", // react-dom的TypeScript类型定义
       "@vitejs/plugin-react": "^6.0.1", // Vite的React插件,用于支持React项目
        "eslint": "^9.39.4",// ESLint代码风格检查工具
        "eslint-plugin-react-hooks": "^7.0.1",  // ESLint的React Hooks插件
        "eslint-plugin-react-refresh": "^0.5.2", // ESLint的React Fast Refresh插件,当你对组件的代码进行修改时,能够更快地看到更新效果,而无需完全重新加载整个应用。
        "globals": "^17.4.0", // 提供全局变量定义(如 window、document),供 ESLint 使用. 因为ESLint 默认不认识 window、document、console 这些浏览器全局变
        "vite": "^8.0.4" // Vite构建工具
    }
}

# 5、项目启动流程说明

TIP

本小节我们来学习:当执行 npm run dev 时,项目是如何启动的。

首先我们来看下index.html文件中的代码,如下:

<!--
整个项目的根节点,整个项目所有内容最终都会被添加到该div元素中
-->
<div id="root"></div>

<!--整个项目的JS入口文件,即项目的主文件-->
<script type="module" src="/src/main.jsx"></script>

index.html 文件作为项目的入口文件,里面通过 ES 模块化的方式加载了main.jsx,同时提供了 React 项目根组件容器#root,即:后续所有组件(本质是 DOM)都会被添加到#root容器内。

当执行npm run dev启动项目时,首先会找到index.html文件,然后会顺着找到main.jsx文件,内容如下:

//StrictMode 为 React 内置组件,帮助你在开发过程中尽早地发现组件中的常见错误
import { StrictMode } from 'react'
// createRoot 允许在浏览器的 DOM 节点中创建根节点以显示 React 组件。
import { createRoot } from 'react-dom/client'
// 导入CSS
import './index.css'
// 导入 React 根组件(函数式组件)
import App from './App.jsx'
//  将App根组件的内容渲染成真实DOM添加到html页面中的根节点`<div id="root"></div>`中。
createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>,
)

main.jsx文件中代码的主要功能:将 App 根组件的内容转换成真实 DOM 添加到了 html 页面中的根节点<div id="root"></div>中。

自带的App.jsx中的内容过于复杂,对初学者不友好,我们把App.jsx中的内容修改成如下:

// App组件(函数式组件),并对外导出
export default function App() {
    // 返回JSX 
    return <h1>Hello React</h1>
}

然后保存,打开浏览器,就可以看到如下:

image-20260408134611803

# 6、项目目录结构

TIP

通过上面提到的 Vite 脚手架创建后的 React 项目目录结构如下:

my-app/                          # 项目根目录
│
├── 📄 eslint.config.js          # ESLint 配置文件(代码规范检查)
├── 📄 index.html                # 应用的 HTML 入口文件
├── 📄 package-lock.json        # npm 依赖的精确版本锁定文件(自动生成)
├── 📄 package.json              # 项目配置和依赖管理文件
├── 📄 README.md                 # 项目说明文档
├── 📄 vite.config.js            # Vite 构建工具配置文件
│
├── 📁 public/                   # 静态资源目录(不经过构建处理)
│   ├── 🖼️ favicon.svg          # 浏览器标签页图标
│   └── 🖼️ icons.svg            # 其他图标文件
│
└── 📁 src/                      # 源代码目录(核心开发目录)
    ├── 📄 App.css               # App 组件的样式文件
    ├── 📄 App.jsx               # 根组件(应用主组件)
    ├── 📄 index.css             # 全局样式文件
    ├── 📄 main.jsx              # 应用入口文件(渲染挂载点)
    │
    └── 📁 assets/               # 资源文件夹(图片、字体等)
        ├── 🖼️ hero.png          # 英雄区/横幅图片
        ├── 🖼️ react.svg         # React logo 图标
        └── 🖼️ vite.svg          # Vite logo 图标

# 7、public 目录介绍

TIP

public 下的资源会在项目生产环境打包时,被完整复制到项目的根目录下。

在前面项目的基础上,当我们执行npm run build 构建 React 项目时,会看到public目录下的vite.svg图片被打包到了dist根目录下。

打包后项目目录结构如下:

//  打包后 , public 下的图片资源直接放在了 dist 根目录下
dist
├─ assets
│  ├─ hero-5sT3BiRD.png
│  ├─ index-DSI1Iwzh.js
│  ├─ index-DykytF2W.css
│  ├─ react-CHdo91hT.svg
│  └─ vite-BF8QNONU.svg
├─ favicon.svg   // 原 public 文件中图片
├─ icons.svg    // 原 public 文件中图片
└─ index.html  // 项目主页(入口文件)

不管在开发环境还是生产环境,访问 public 目录下的文件,直接通过根路径来访问

export default function App() {
    // 直接通过根路径访问public下的vite.svg图片
    return <h1> Hello React <img src="/favicon.svg" /></h1>
}

image-20260408134806685

public下存放的资源

如果你有以下资源,应该放在public目录下:

  • 不会被源码引用(例如 robots.txt)
  • 必须保持原有文件名(没有经过 hash)
  • ...或者你压根不想引入该资源,只是想得到其 URL

# 8、安装 React 调试工具( 开发检查工具)

以下内容来自 React 官网:React 开发者工具 (opens new window),点击进入了解更多内容

用 React Developer Tools(React 开发者工具),你可以:

  • 查看页面上有哪些 组件
  • 现场修改组件的 属性(props) 和 状态(state)
  • 找出哪里拖慢了页面性能

调试 React 网站最简单的方法,就是装一个 React Developer Tools 浏览器插件。

下面是各浏览器插件的下载地址

现在,如果你访问一个用 React 构建 的网站,你将看到

  • Components (组件)
  • Profiler (性能分析)

react-devtools-extension

# 9、安装 Vscode 插件: Simple React Snippets

Simple React Snippets 是一个为 VS Code 设计的代码片段扩展插件,其主要功能是通过输入简短的前缀(快捷键) 后按 Tab 或 Enter 键,快速生成 React 常用代码模板,从而提高开发效率

image-20260413185422184

更多用法,查询 Simple React Snippets 源码仓库 (opens new window)

示例

输入ffc 回车,即可生成如下代码

function (|) {
    return ( | );
}

export default |;

输入sfc 回车,即可生成如下代码

const  = (|) => {
  return ( | );
}
 
export default |;

# 五、命令式与声明式编程

要了解什么是声明式,最好与命令式结合在一起来学习,这样能帮助我们更好的理解声明式。

  • 命令式编程:更关注过程

  • 声明式编程:更关注结果

我们先用一个生活中的例子,来帮助你理解。比如,你想要你男朋友帮你倒杯水

  • 如果用命令式,你要对他说:“先到餐桌----拿起我的水杯---转身----向前走---把杯子放在饮水机下---按下开关---端水---走到我面前”,然后才能喝到水。
  • 如果用声明式,你只需要对他说:“我口渴了,想喝水”,他就会把水端到你面前,你就能喝到水了。

通过上面例子,我相信你能理解,什么叫更关注过程和更关注结果。

总结

  • 命令式,需要你把每一步的要如何做告诉他,才能达到你想的结果

  • 声明式,你只需要告诉他你想要什么就好,他就会帮你实现。

# 1、原生 JS 实现:命令式编程

原生JS实现:当点击 div 元素时,会给 div 元素添加内容 “hello"

GIF2024-4-714-38-50

// 1、获取.box元素
const box = document.querySelector(".box");
// 2、.box绑定click事件
box.onclick = function () {
    // 3、将box的内容更新为Hello
    this.innerText = "Hello";
};

以上代码为命令式编程,需要详细的告诉计算机,我们要做的每一步操作。以上代码在执行时分为以下三步:

  • 获取 .box 元素
  • 给 .box 元素绑定 click 事件
  • 当 click 事件触发后,为 .box 元素添加内容为 "hello"

# 2、React 库实现:声明式编程

当点击 div 元素时,会给 div 元素添加内容 "hello"

GIF2024-4-714-38-50

import { useState } from "react";

export default function App() {
  // 定义div元素的行内样式
  const styleObj = { width: 100, height: 100, background: "red" };
  const [state, setState] = useState("");
  // 点击事件
  const handleClick = () => {
    setState("hello");
  };
  return (
    <div onClick={handleClick} style={styleObj}>
      {state}
    </div>
  );
}

以上代码,重点关注 HTML 部分代码,这就是React帮我们实现以上功能的方式。可以看到,我们提供的是一个“结果”。就好比告诉React:“嘿,React,我要在div中显示上面变量state里的内容,当我点击div这个元素时,你调用handleClick方法,帮我更新下div中的内容”。

至于具体的实现过程,我们不需要关注,React会帮我们完成。换句话说,React帮我们封装了整个JS 操作 DOM 的过程,因此,我们可以猜想,React 的内部实现一定是命令式的,而暴露给用户的却是声明式的。

总结:

声明式编程的好处,就是让开发人员无需直接操作DOM,只需关注业务逻辑,提高开发效率

大厂最新技术学习分享群

大厂最新技术学习分享群

微信扫一扫进群,获取资料

X