当前位置: 首页 > news >正文

React 前端框架全面教程:从入门到进阶

React 前端框架全面教程:从入门到进阶

引言

在现代前端开发中,React 作为一款流行的 JavaScript 库,以其组件化、声明式的特性和强大的生态系统,成为了开发者的首选。无论是构建单页应用(SPA)还是复杂的用户界面,React 都能提供高效、灵活的解决方案。本篇文章将全面介绍 React,从基础知识到进阶技巧,帮助你快速掌握 React 开发。

目录

  1. 什么是 React?
  2. React 的核心概念
    • 组件
    • JSX
    • 虚拟 DOM
  3. 环境搭建
  4. 创建第一个 React 应用
  5. 组件的生命周期
  6. 状态管理
    • useState
    • useReducer
  7. 组件间的通信
  8. 路由管理
  9. 处理表单
  10. 组件的样式
  11. 测试 React 组件
  12. 总结与拓展

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 模块可以避免样式冲突。

  1. 创建 MyComponent.module.css 文件:
.title {color: red;
}
  1. 在组件中引入:
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 前端框架有所帮助!如果你有任何问题或建议,欢迎在评论区留言。


附:参考配图

  1. React Logo:展示 React 的标志,增强视觉效果。

  2. 组件示例图:展示 React 组件的结构和关系。
    3.

  3. 路由示意图:展示不同路由之间的关系。
    在这里插入图片描述

  4. 表单处理示例:展示表单的使用场景。
    在这里插入图片描述

通过这些内容的学习和实践,相信你能够在 React 的开发中游刃有余,构建出高质量的应用程序。期待你在 React 领域的探索与成长!

相关文章:

React 前端框架全面教程:从入门到进阶

React 前端框架全面教程&#xff1a;从入门到进阶 引言 在现代前端开发中&#xff0c;React 作为一款流行的 JavaScript 库&#xff0c;以其组件化、声明式的特性和强大的生态系统&#xff0c;成为了开发者的首选。无论是构建单页应用&#xff08;SPA&#xff09;还是复杂的用…...

重拾CSS,前端样式精读-布局(弹性盒)

前言 本文收录于CSS系列文章中&#xff0c;欢迎阅读指正 接着上篇布局文章继续介绍当前流行的布局方式 Flexbox布局 长久以来&#xff0c;CSS 布局中唯一可靠且跨浏览器兼容的创建工具只有floats和positioning。这两个工具大部分情况下都很好使&#xff0c;但是在某些方面它…...

Python 使用 LSTM 进行情感分析:处理文本序列数据的指南

使用 LSTM 进行情感分析&#xff1a;处理文本序列数据的指南 长短期记忆网络&#xff08;LSTM&#xff09;是一种适合处理序列数据的深度学习模型&#xff0c;广泛应用于情感分析、语音识别、文本生成等领域。它通过在训练过程中“记住”过去的数据特征来理解和预测序列数据的…...

MySQL:INSERT IGNORE 语句的用法

INSERT IGNORE 语句 在MySQL中&#xff0c;INSERT IGNORE 语句用于尝试向表中插入一行数据&#xff0c;但如果插入操作会导致表中唯一索引或主键的冲突&#xff0c;MySQL将忽略该操作并继续执行&#xff0c;而不会引发错误。这意味着&#xff0c;如果表中已经存在具有相同唯一…...

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在教育领域有很多创业机会&#xff0c;尤其是在个性化学习、教学辅助、教育资源优化等方面。以下是一些潜在的创业机会&#xff1a; 个性化学习平台 学习路径定制&#xff1a;根据学生的学习数据与兴趣&#xff0c;为他们设计个性化的学习路径&#xff0c;提供适合的课…...

网页上视频没有提供下载权限怎么办?

以腾讯会议录屏没有提供下载权限为例&#xff0c;该怎么办呢&#xff1f; 最好的办法就是找到管理员&#xff0c;开启下载权限。如果找不到呢&#xff0c;那就用这个办法下载。 1.打开Microsoft Edge浏览器的扩展 2.搜索“视频下载”&#xff0c;选择“视频下载Pro” 3.点击“…...

【去哪里找开源商城项目】

有很多途径可以找到开源项目&#xff0c;以下是一些常用的方法&#xff1a; 开源代码托管平台&#xff1a;许多开源项目都托管在平台上&#xff0c;例如GitHub、GitLab和Bitbucket。你可以在这些平台上浏览项目&#xff0c;搜索关键词&#xff0c;查看项目的星级和贡献者数量等…...

ei会议检索:第二届网络、通信与智能计算国际会议(NCIC 2024)

第二届网络、通信与智能计算国际会议&#xff08;NCIC 2024&#xff09;将于2024年11月22-25日在北京信息科技大学召开&#xff0c;聚焦网络、通信与智能计算&#xff0c;欢迎国内外学者投稿交流&#xff0c;录用文章将在Springer出版&#xff0c;并提交EI等检索。 NCIC 2024&a…...

vue添加省市区

主要参考“element”框架&#xff1a;Element - The worlds most popular Vue UI framework <div class"block"><span class"demonstration">默认 click 触发子菜单</span><el-cascaderv-model"value":options"optio…...

运维监控丨16条常用的Kafka看板监控配置与告警规则

本期我们针对企业运维监控的场景&#xff0c;介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求&#xff0c;灵活调整和扩展这些监控配置及告警规则。在实际应用场景中&#xff0c;需要综合运用多种监控工具&#xff08;例如Prometheus、Grafana、Zabbix等&#…...

ECharts饼图,配置标注示例

const color ["#00FFB4", "#5498FD", "#6F54FD", "#FD5454", "#FDA354",]const datas [{ value: 100, name: "一年级" },{ value: 70, name: "二年级" },{ value: 184, name: "三年级" },{…...

【大象数据集】大象图像识别 目标检测 机器视觉(含数据集)

一、背景意义 在信息时代&#xff0c;数据的收集和分析技术得到了飞速发展。深度学习算法的出现&#xff0c;为处理和分析这些复杂的鱼类数据集提供了强大的工具。深度学习具有强大的模式识别和特征提取能力&#xff0c;能够从海量的数据中自动学习和发现规律&#xff0c;为鱼…...

LN 在 LLMs 中的不同位置 有什么区别么

Layer Normalization&#xff08;LN&#xff09;是一种在深度学习中用于稳定和加速神经网络训练的归一化技术。它通过对单个样本的所有激活进行归一化来工作&#xff0c;与Batch Normalization&#xff08;BN&#xff09;不同&#xff0c;BN是对一个mini-batch中的所有样本的激…...

【代码随想录Day57】图论Part08

拓扑排序精讲 题目链接/文章讲解&#xff1a;代码随想录 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.测试-分析-混淆矩阵等等&#xff0c;测试图片效果等 7.导出onnx 8.onnx推理 9.docker环境简单补充 1.前言 好久没有做图像分类了&#xff0c;于是想用商汤的mmclassification快速搞一波&#xff0c;发现已…...

shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘

查找美国安全局漏洞 nww.nsa.gov&#xff08;美国安全局官方网站) net参数使用 搜索指定的ip网段 shodan search --limit 10 --fields ip_str,port net:208.88.84.0/24 (老美国家安全局的一个网段)可能直接访问不太行&#xff0c;可以使用host参数&#xff0c;得到域名再去…...

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 的差分约束系统&#xff0c;这里 b b b 的所有元素为实数&#xff0c;而变量 x i x_i xi​ 中某个给定的子集是整数。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 差分约束系统问题通常用于解决带有约…...

Unity自定义数组在Inspector窗口的显示方式

了解 单行高度:EditorGUIUtility.singleLineHeight获取 PropertyField 控件所需的高度:EditorGUI.GetPropertyHeight属性是否在Inspector窗口展开&#xff1a;SerializedProperty.isExpanded可重新排序列表类&#xff1a;ReorderableList绘制纯色矩形&#xff1a;EditorGUI.Dr…...

模电小白必看:3种基本放大电路实战对比(附电路图+避坑指南)

模电入门实战&#xff1a;三大基础放大电路深度解析与避坑指南 刚接触模拟电路时&#xff0c;面对共射极、共集极和共基极这三种基本放大电路&#xff0c;很多初学者都会感到困惑——它们看起来相似&#xff0c;但特性却大不相同。本文将用面包板搭建的真实电路和示波器实测波形…...

SEO_详解SEO优化的完整工作流程与执行要点

<h2>SEO优化的重要性</h2> <p>在当前数字化时代&#xff0c;网站的可见度和流量直接关系到企业的市场竞争力。搜索引擎优化&#xff08;SEO&#xff09;作为提升网站在搜索引擎中排名的关键手段&#xff0c;其重要性不言而喻。SEO不仅能帮助企业吸引更多的自…...

超实用!学生党第一把吉他怎么选?9款“低弦距神器”深度测评与避坑指南!

大家好&#xff0c;我是深耕音乐教育与乐器选购多年的好物推荐官&#xff0c;常年和学生党打交道&#xff0c;最常被问到的问题就是&#xff1a;“预算有限&#xff0c;怎么选到好弹又耐用的吉他&#xff1f;” 其实对学生而言&#xff0c;第一把吉他无需追求高端奢华&#xff…...

Ubuntu 22.04 换源+Docker安装+镜像加速

Ubuntu 22.04 换源Docker安装镜像加速 前言 本文针对 Ubuntu 22.04 LTS 系统&#xff0c;先更换国内镜像源提升下载速度&#xff0c;再完成 Docker 引擎与 Compose 插件安装&#xff0c;最后配置 Docker 国内镜像加速&#xff0c;全程无报错、可直接复制执行&#xff0c;适配 V…...

Andi活码,最简单好用!

上链接&#xff1a; https://app.andi.cn/qr/ 试用过这么多群聊二维码的活码工具。 真正好用的是我推荐的这款Andi活码。 免登录、打开即用。单屏管理&#xff0c;超简单好用。 优威科技有限公司出品。 承诺永久免费长期支持。 稳定可靠好用&#xff01; 不信我来用一下…...

从‘Hello World’到视频监控:用QT+海康SDK开发你的第一个安防应用

从‘Hello World’到视频监控&#xff1a;用QT海康SDK开发你的第一个安防应用 第一次看到海康威视摄像头的实时画面在自己的程序里跳出来时&#xff0c;那种成就感比写一百个"Hello World"都来得强烈。作为一位刚接触QT的开发者&#xff0c;你可能已经厌倦了按钮和文…...

Element-UI Loading动画实战:如何优雅处理路由跳转与请求拦截(附自定义图标技巧)

Element-UI Loading动画深度优化&#xff1a;从路由拦截到视觉定制的完整方案 在Vue技术栈项目中&#xff0c;Element-UI的Loading服务是提升用户体验的关键组件之一。当页面需要等待数据加载或路由跳转时&#xff0c;一个流畅的加载动画能有效缓解用户的焦虑情绪。本文将深入探…...

2026论文写作工具红黑榜:AI论文网站怎么选?这份榜单够用!

红榜优先选千笔AI、ThouPen、豆包&#xff0c;适配国内学术规范&#xff1b;黑榜避开低质免费工具、无真实引用平台、过度依赖全文生成的工具&#xff0c;优先按需求匹配三维模型&#xff08;需求匹配度 - 数据可信度 - 成本承受力&#xff09;。 一、红榜&#xff1a;10 款高分…...

axure-cn语言包:让Axure RP全版本界面无缝切换至中文的完整指南

axure-cn语言包&#xff1a;让Axure RP全版本界面无缝切换至中文的完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-…...

桌面歌词工具:LyricsX让Mac音乐体验全面升级

桌面歌词工具&#xff1a;LyricsX让Mac音乐体验全面升级 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 在Mac上享受音乐时&#xff0c;你是否曾因无法显示桌面歌词而感到…...