当前位置: 首页 > 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…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...