React 前端框架全面教程:从入门到进阶
React 前端框架全面教程:从入门到进阶
引言
在现代前端开发中,React 作为一款流行的 JavaScript 库,以其组件化、声明式的特性和强大的生态系统,成为了开发者的首选。无论是构建单页应用(SPA)还是复杂的用户界面,React 都能提供高效、灵活的解决方案。本篇文章将全面介绍 React,从基础知识到进阶技巧,帮助你快速掌握 React 开发。
目录
- 什么是 React?
- React 的核心概念
- 组件
- JSX
- 虚拟 DOM
- 环境搭建
- 创建第一个 React 应用
- 组件的生命周期
- 状态管理
- useState
- useReducer
- 组件间的通信
- 路由管理
- 处理表单
- 组件的样式
- 测试 React 组件
- 总结与拓展
1. 什么是 React?
React 是由 Facebook 开发并维护的一个开源 JavaScript 库,用于构建用户界面。它的核心理念是组件化,允许开发者将 UI 拆分为独立的、可复用的部分,从而提高代码的可维护性和可读性。

2. React 的核心概念
2.1 组件
组件是 React 的基本构建块。每个组件都包含自己的状态和逻辑,可以通过 props 接收数据。
import React from 'react';function MyComponent(props) {return <h1>{props.message}</h1>;
}
2.2 JSX
JSX 是 JavaScript 的一种语法扩展,允许你在 JavaScript 代码中写 HTML 结构。React 使用 JSX 来描述 UI。
const element = <h1>Hello, world!</h1>;
2.3 虚拟 DOM
React 使用虚拟 DOM 来优化性能。每当组件的状态发生变化时,React 会首先对虚拟 DOM 进行更新,然后计算出最小的 DOM 操作,从而提高渲染效率。
3. 环境搭建
在开始使用 React 之前,我们需要搭建开发环境。推荐使用 Create React App 工具来快速创建 React 项目。
3.1 安装 Node.js
确保你的计算机上安装了 Node.js。可以在 Node.js 官网 下载并安装。
3.2 创建 React 应用
使用 Create React App 创建新的 React 项目:
npx create-react-app my-react-app
cd my-react-app
npm start
你可以在浏览器中访问 http://localhost:3000 查看默认页面。
4. 创建第一个 React 应用
4.1 修改 App 组件
打开 src/App.js 文件,修改内容如下:
import React from 'react';function App() {return (<div><h1>欢迎来到我的第一个 React 应用!</h1></div>);
}export default App;
4.2 运行应用
保存文件后,浏览器会自动刷新,你将看到新的内容。
5. 组件的生命周期
每个 React 组件都有其生命周期,开发者可以在特定的生命周期阶段执行代码。常用的生命周期方法包括:
componentDidMount:组件挂载后调用。componentDidUpdate:组件更新后调用。componentWillUnmount:组件卸载前调用。
5.1 使用类组件
import React, { Component } from 'react';class MyComponent extends Component {componentDidMount() {console.log('组件已挂载');}render() {return <h1>类组件示例</h1>;}
}
5.2 使用函数组件和 Hooks
使用 React Hooks,可以在函数组件中管理生命周期:
import React, { useEffect } from 'react';function MyComponent() {useEffect(() => {console.log('组件已挂载');}, []);return <h1>函数组件示例</h1>;
}
6. 状态管理
6.1 useState
useState 是 React 的一个 Hook,用于在函数组件中管理状态。
import React, { useState } from 'react';function Counter() {const [count, setCount] = useState(0);return (<div><p>当前计数:{count}</p><button onClick={() => setCount(count + 1)}>增加</button></div>);
}
6.2 useReducer
useReducer 是另一种状态管理的方式,适合复杂状态逻辑。
import React, { useReducer } from 'react';function reducer(state, action) {switch (action.type) {case 'increment':return { count: state.count + 1 };case 'decrement':return { count: state.count - 1 };default:throw new Error();}
}function Counter() {const [state, dispatch] = useReducer(reducer, { count: 0 });return (<div><p>当前计数:{state.count}</p><button onClick={() => dispatch({ type: 'increment' })}>增加</button><button onClick={() => dispatch({ type: 'decrement' })}>减少</button></div>);
}
7. 组件间的通信
7.1 父子组件通信
父组件可以通过 props 向子组件传递数据,子组件通过 props 接收。
function Parent() {const message = '来自父组件的消息';return <Child message={message} />;
}function Child(props) {return <h1>{props.message}</h1>;
}
7.2 兄弟组件通信
兄弟组件之间的通信通常通过父组件作为中介,父组件将状态传递给兄弟组件。
8. 路由管理
在 React 应用中,使用 react-router-dom 来实现路由管理。
8.1 安装 React Router
npm install react-router-dom
8.2 使用 React Router
在 src/App.js 中设置路由:
import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './Home';
import About from './About';function App() {return (<Router><Switch><Route path="/" exact component={Home} /><Route path="/about" component={About} /></Switch></Router>);
}export default App;
9. 处理表单
React 提供了一种简单的方式来处理表单。
9.1 受控组件
import React, { useState } from 'react';function MyForm() {const [inputValue, setInputValue] = useState('');const handleChange = (event) => {setInputValue(event.target.value);};const handleSubmit = (event) => {event.preventDefault();console.log('提交的值:', inputValue);};return (<form onSubmit={handleSubmit}><input type="text" value={inputValue} onChange={handleChange} /><button type="submit">提交</button></form>);
}
10. 组件的样式
10.1 内联样式
const style = {color: 'blue',fontSize: '20px',
};function StyledComponent() {return <h1 style={style}>内联样式示例</h1>;
}
10.2 CSS 模块
使用 CSS 模块可以避免样式冲突。
- 创建
MyComponent.module.css文件:
.title {color: red;
}
- 在组件中引入:
import styles from './MyComponent.module.css';function MyComponent() {return <h1 className={styles.title}>CSS 模块示例</h1>;
}
11. 测试 React 组件
使用 Jest 和 React Testing Library 进行组件测试。
11.1 安装测试工具
npm install --save-dev @testing-library/react
11.2 编写测试
import { render, screen } from '@testing-library/react';
import MyComponent from './MyComponent';test('renders message', () => {render(<MyComponent />);const linkElement = screen.getByText(/Hello, World!/i);expect(linkElement).toBeInTheDocument();
});
12. 总结与拓展
本文详细介绍了 React 的核心概念、环境搭建、组件创建、状态管理、组件通信、路由管理、表单处理、样式管理以及组件测试等内容。通过这些知识的学习和实践,你可以更高效地开发 React 应用。
拓展阅读
- React 官方文档
- React Router 文档
- Redux 状态管理
希望本文对你学习 React 前端框架有所帮助!如果你有任何问题或建议,欢迎在评论区留言。
附:参考配图
-
React Logo:展示 React 的标志,增强视觉效果。
-
组件示例图:展示 React 组件的结构和关系。

-
路由示意图:展示不同路由之间的关系。

-
表单处理示例:展示表单的使用场景。

通过这些内容的学习和实践,相信你能够在 React 的开发中游刃有余,构建出高质量的应用程序。期待你在 React 领域的探索与成长!
相关文章:
React 前端框架全面教程:从入门到进阶
React 前端框架全面教程:从入门到进阶 引言 在现代前端开发中,React 作为一款流行的 JavaScript 库,以其组件化、声明式的特性和强大的生态系统,成为了开发者的首选。无论是构建单页应用(SPA)还是复杂的用…...
重拾CSS,前端样式精读-布局(弹性盒)
前言 本文收录于CSS系列文章中,欢迎阅读指正 接着上篇布局文章继续介绍当前流行的布局方式 Flexbox布局 长久以来,CSS 布局中唯一可靠且跨浏览器兼容的创建工具只有floats和positioning。这两个工具大部分情况下都很好使,但是在某些方面它…...
Python 使用 LSTM 进行情感分析:处理文本序列数据的指南
使用 LSTM 进行情感分析:处理文本序列数据的指南 长短期记忆网络(LSTM)是一种适合处理序列数据的深度学习模型,广泛应用于情感分析、语音识别、文本生成等领域。它通过在训练过程中“记住”过去的数据特征来理解和预测序列数据的…...
MySQL:INSERT IGNORE 语句的用法
INSERT IGNORE 语句 在MySQL中,INSERT IGNORE 语句用于尝试向表中插入一行数据,但如果插入操作会导致表中唯一索引或主键的冲突,MySQL将忽略该操作并继续执行,而不会引发错误。这意味着,如果表中已经存在具有相同唯一…...
java模拟进程调度
先来先服务优先级调度短作业优先调度响应比优先调度 代码 import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner;class Main {static class tasks{int id;//序号char jinchengname;//进程名int jinchengId;//double a…...
大模型AI在教育领域有哪些创业机会?
大模型AI在教育领域有很多创业机会,尤其是在个性化学习、教学辅助、教育资源优化等方面。以下是一些潜在的创业机会: 个性化学习平台 学习路径定制:根据学生的学习数据与兴趣,为他们设计个性化的学习路径,提供适合的课…...
网页上视频没有提供下载权限怎么办?
以腾讯会议录屏没有提供下载权限为例,该怎么办呢? 最好的办法就是找到管理员,开启下载权限。如果找不到呢,那就用这个办法下载。 1.打开Microsoft Edge浏览器的扩展 2.搜索“视频下载”,选择“视频下载Pro” 3.点击“…...
【去哪里找开源商城项目】
有很多途径可以找到开源项目,以下是一些常用的方法: 开源代码托管平台:许多开源项目都托管在平台上,例如GitHub、GitLab和Bitbucket。你可以在这些平台上浏览项目,搜索关键词,查看项目的星级和贡献者数量等…...
ei会议检索:第二届网络、通信与智能计算国际会议(NCIC 2024)
第二届网络、通信与智能计算国际会议(NCIC 2024)将于2024年11月22-25日在北京信息科技大学召开,聚焦网络、通信与智能计算,欢迎国内外学者投稿交流,录用文章将在Springer出版,并提交EI等检索。 NCIC 2024&a…...
vue添加省市区
主要参考“element”框架:Element - The worlds most popular Vue UI framework <div class"block"><span class"demonstration">默认 click 触发子菜单</span><el-cascaderv-model"value":options"optio…...
运维监控丨16条常用的Kafka看板监控配置与告警规则
本期我们针对企业运维监控的场景,介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求,灵活调整和扩展这些监控配置及告警规则。在实际应用场景中,需要综合运用多种监控工具(例如Prometheus、Grafana、Zabbix等&#…...
ECharts饼图,配置标注示例
const color ["#00FFB4", "#5498FD", "#6F54FD", "#FD5454", "#FDA354",]const datas [{ value: 100, name: "一年级" },{ value: 70, name: "二年级" },{ value: 184, name: "三年级" },{…...
【大象数据集】大象图像识别 目标检测 机器视觉(含数据集)
一、背景意义 在信息时代,数据的收集和分析技术得到了飞速发展。深度学习算法的出现,为处理和分析这些复杂的鱼类数据集提供了强大的工具。深度学习具有强大的模式识别和特征提取能力,能够从海量的数据中自动学习和发现规律,为鱼…...
LN 在 LLMs 中的不同位置 有什么区别么
Layer Normalization(LN)是一种在深度学习中用于稳定和加速神经网络训练的归一化技术。它通过对单个样本的所有激活进行归一化来工作,与Batch Normalization(BN)不同,BN是对一个mini-batch中的所有样本的激…...
【代码随想录Day57】图论Part08
拓扑排序精讲 题目链接/文章讲解:代码随想录 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取文件数量 n 和依赖关系数量 mint n scanner.nextInt();int m scanner.nextInt()…...
记录一次mmpretrain训练数据并转onnx推理
目录 1.前言 2.代码 3.数据形态【分类用】 4.配置文件 5.训练 6.测试-分析-混淆矩阵等等,测试图片效果等 7.导出onnx 8.onnx推理 9.docker环境简单补充 1.前言 好久没有做图像分类了,于是想用商汤的mmclassification快速搞一波,发现已…...
shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘
查找美国安全局漏洞 nww.nsa.gov(美国安全局官方网站) net参数使用 搜索指定的ip网段 shodan search --limit 10 --fields ip_str,port net:208.88.84.0/24 (老美国家安全局的一个网段)可能直接访问不太行,可以使用host参数,得到域名再去…...
telnet 密码模式 访问路由器
telnet 密码访问华为路由器 模拟被访问路由 sy [Huawei]int g0/0/0 //选中 g0/0/0端口 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 24 //设置端口ip [Huawei]user-interface vty 0 4 //配置vty [Huawei-ui-vty0-4]set authentication password cipher huawei123 //设置…...
文心一言 VS 讯飞星火 VS chatgpt (380)-- 算法导论24.4 12题
十二、给出一个有效算法来解决 A x ⩽ b Ax⩽b Ax⩽b 的差分约束系统,这里 b b b 的所有元素为实数,而变量 x i x_i xi 中某个给定的子集是整数。如果要写代码,请用go语言。 文心一言: 差分约束系统问题通常用于解决带有约…...
Unity自定义数组在Inspector窗口的显示方式
了解 单行高度:EditorGUIUtility.singleLineHeight获取 PropertyField 控件所需的高度:EditorGUI.GetPropertyHeight属性是否在Inspector窗口展开:SerializedProperty.isExpanded可重新排序列表类:ReorderableList绘制纯色矩形:EditorGUI.Dr…...
为 Cursor 构建 API 协议转换网关:解决多模型兼容性问题
1. 项目概述:为 Cursor 打造一个全能的 API 协议转换网关如果你和我一样,深度依赖 Cursor 作为主力开发工具,同时又想灵活地使用各种第三方大模型 API(比如那些性价比更高的中转站服务),那你一定遇到过这个…...
Windows下CLion配置NDK的CMake项目,为什么你的Android.toolchain.cmake总报错?一篇讲清所有参数
Windows下CLion配置NDK的CMake项目:破解android.toolchain.cmake报错全指南 当你第一次在CLion中尝试配置NDK的CMake项目时,那个看似简单的android.toolchain.cmake文件可能成了噩梦的开始。明明按照教程一步步操作,却在编译时遭遇各种莫名其…...
模型广场功能让开发者轻松对比与选择合适的大模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 模型广场功能让开发者轻松对比与选择合适的大模型 对于开发者而言,面对众多大模型厂商和不断更新的模型版本࿰…...
一维残差网络水下超声无损检测与缺陷识别【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)EWT-FastICA联合降噪与有效IMF分量筛选机制ÿ…...
代码与图形的双向桥梁:在Draw.io中实现Mermaid图表工作流
代码与图形的双向桥梁:在Draw.io中实现Mermaid图表工作流 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 在技术文档和系统设计的日常工作中,开…...
FreeRouting终极指南:如何快速掌握开源PCB自动布线工具
FreeRouting终极指南:如何快速掌握开源PCB自动布线工具 【免费下载链接】freerouting Advanced PCB auto-router 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting FreeRouting是一款功能强大的开源PCB自动布线工具,能够帮助你高效完成复…...
实测Taotoken多模型路由的延迟与稳定性体感分享
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 实测Taotoken多模型路由的延迟与稳定性体感分享 作为日常依赖大模型API进行开发的工程师,API服务的稳定性和响应速度是…...
大会证件/笔记本/开发板丢失怎么办?一线运维团队整理的7类高危物品应急响应SOP,含密钥擦除与隐私保护强制流程
更多请点击: https://intelliparadigm.com 第一章:奇点智能技术大会失物招领 在奇点智能技术大会现场,遗失物品高频出现在三个核心区域:主会场入口安检台、AI沙箱体验区休息椅、以及开源工作坊工位抽屉。为提升认领效率ÿ…...
手把手教你用88E1111 PHY芯片搞定百兆以太网硬件设计(附MII接口配置避坑指南)
手把手教你用88E1111 PHY芯片实现百兆以太网硬件设计实战指南 在嵌入式系统和工业控制领域,百兆以太网仍然是可靠且经济高效的网络解决方案。Marvell的88E1111 PHY芯片凭借其稳定性和灵活性,成为众多硬件工程师的首选。本文将从一个实际项目开发者的视角…...
Taotoken的计费透明性如何让开发者对每一分钱都心中有数
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的计费透明性如何让开发者对每一分钱都心中有数 对于依赖大模型API进行开发的团队和个人而言,成本控制与预算管…...
