React 全面入门与进阶实战教程

文章目录

  • 一、认识 React
    • 1.1 核心特点
  • 二、快速搭建 React 项目
    • 2.1 使用 Create React App
    • 2.2 使用 Vite 创建更轻量的 React 项目
    • 2.3 项目结构概览
  • 三、React 核心语法基础
    • 3.1 JSX:React 的模板语法
    • 3.2 函数组件与 Props
    • 3.3 useState:定义响应式状态
    • 3.4 条件渲染
    • 3.5 列表渲染
    • 3.6 useEffect:副作用管理
  • 四、组件通信方式详解
    • 4.1 父 → 子(props)
    • 4.2 子 → 父(回调函数)
    • 4.3 跨层通信:Context
  • 五、React Router 路由配置
    • 5.1 安装
    • 5.2 使用 BrowserRouter 和 Routes
    • 5.3 路由跳转和传参
  • 六、状态管理(Redux Toolkit)
    • 6.1 安装依赖
    • 6.2 创建切片和 Store
    • 6.3 在组件中使用
  • 七、进阶技巧与性能优化
    • 7.1 React.memo
    • 7.2 useCallback / useMemo
    • 7.3 异步数据处理:React Query 示例
  • 八、推荐的 React 技术栈生态
    • 8.1 网络请求:axios + swr
      • axios 简用法:
      • swr 使用(自动缓存 + 重试):
    • 8.2 表单处理:react-hook-form
    • 8.3 状态管理:Redux Toolkit + Zustand(更轻)
    • 8.4 动画库:Framer Motion
    • 8.5 UI 框架推荐
    • 8.6 构建工具推荐
  • 九、部署与上线
    • 9.1 构建项目
    • 9.2 免费部署平台
  • 十、总结与学习路径建议

一、认识 React

React 是由 Facebook 开发的构建用户界面的 JavaScript 库。它通过组件化的开发方式提高了 UI 复用能力,是现代前端开发的核心技术之一。

1.1 核心特点

  • 基于组件:构建复杂 UI 就像搭积木。
  • 虚拟 DOM:高效的 UI 更新策略。
  • 单向数据流:更易于维护和调试。
  • 声明式编程:代码更简洁、更可预测。

二、快速搭建 React 项目

2.1 使用 Create React App

npx create-react-app my-app
cd my-app
npm start

2.2 使用 Vite 创建更轻量的 React 项目

npm create vite@latest my-app --template react
cd my-app
npm install
npm run dev

2.3 项目结构概览

my-app/
├── src/
│   ├── App.jsx
│   ├── main.jsx
│   ├── components/
├── public/
├── index.html
└── package.json

三、React 核心语法基础

3.1 JSX:React 的模板语法

const element = <h1>Hello, React!</h1>;

注意事项:

  • 使用 className 替代 class
  • 表达式用 {} 包裹;
  • 标签必须闭合。

3.2 函数组件与 Props

function Welcome(props) {return <h1>欢迎, {props.name}</h1>;
}<Welcome name="张三" />

3.3 useState:定义响应式状态

import { useState } from 'react';function Counter() {const [count, setCount] = useState(0);return (<><p>当前数量:{count}</p><button onClick={() => setCount(count + 1)}>+1</button></>);
}

3.4 条件渲染

{isLogin ? <p>欢迎回来</p> : <p>请登录</p>}

3.5 列表渲染

const users = ['Tom', 'Jerry', 'Lucy'];
<ul>{users.map((name, i) => <li key={i}>{name}</li>)}
</ul>

3.6 useEffect:副作用管理

useEffect(() => {console.log('组件已挂载');return () => {console.log('组件已卸载');};
}, []);

四、组件通信方式详解

4.1 父 → 子(props)

function Child({ msg }) {return <p>{msg}</p>;
}function Parent() {return <Child msg="来自父组件" />;
}

4.2 子 → 父(回调函数)

function Child({ onSend }) {return <button onClick={() => onSend('hello')}>点击传值</button>;
}function Parent() {const handleMsg = (msg) => console.log(msg);return <Child onSend={handleMsg} />;
}

4.3 跨层通信:Context

const ThemeContext = createContext();function App() {return (<ThemeContext.Provider value="dark"><Toolbar /></ThemeContext.Provider>);
}function Toolbar() {return <ThemedButton />;
}function ThemedButton() {const theme = useContext(ThemeContext);return <button className={theme}>按钮</button>;
}

五、React Router 路由配置

5.1 安装

npm install react-router-dom

5.2 使用 BrowserRouter 和 Routes

import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';function App() {return (<BrowserRouter><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /></Routes></BrowserRouter>);
}

5.3 路由跳转和传参

<Link to="/about">跳转到 About</Link>const navigate = useNavigate();
navigate('/about');

六、状态管理(Redux Toolkit)

6.1 安装依赖

npm install @reduxjs/toolkit react-redux

6.2 创建切片和 Store

// counterSlice.js
import { createSlice } from '@reduxjs/toolkit';const counterSlice = createSlice({name: 'counter',initialState: 0,reducers: {increment: (state) => state + 1}
});export const { increment } = counterSlice.actions;
export default counterSlice.reducer;
// store.js
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';export const store = configureStore({reducer: {counter: counterReducer}
});

6.3 在组件中使用

import { useSelector, useDispatch } from 'react-redux';
import { increment } from './counterSlice';function Counter() {const count = useSelector(state => state.counter);const dispatch = useDispatch();return (<div><p>当前:{count}</p><button onClick={() => dispatch(increment())}>+1</button></div>);
}

七、进阶技巧与性能优化

7.1 React.memo

const MyComponent = React.memo(({ value }) => {return <div>{value}</div>;
});

7.2 useCallback / useMemo

const handleClick = useCallback(() => {console.log('click');
}, []);const expensiveValue = useMemo(() => {return computeSomething();
}, [input]);

7.3 异步数据处理:React Query 示例

npm install @tanstack/react-query
import { useQuery } from '@tanstack/react-query';const { data, isLoading } = useQuery(['todos'], fetchTodos);

八、推荐的 React 技术栈生态

React 周边生态繁荣,推荐以下实用库,并结合使用场景:

8.1 网络请求:axios + swr

axios 简用法:

import axios from 'axios';axios.get('/api/user').then(res => {console.log(res.data);
});

swr 使用(自动缓存 + 重试):

import useSWR from 'swr';const fetcher = url => fetch(url).then(res => res.json());function User() {const { data, error } = useSWR('/api/user', fetcher);if (error) return <div>加载失败</div>;if (!data) return <div>加载中...</div>;return <div>用户名: {data.name}</div>;
}

8.2 表单处理:react-hook-form

npm install react-hook-form
import { useForm } from 'react-hook-form';function Form() {const { register, handleSubmit } = useForm();const onSubmit = data => console.log(data);return (<form onSubmit={handleSubmit(onSubmit)}><input {...register('username')} /><input type="submit" /></form>);
}

8.3 状态管理:Redux Toolkit + Zustand(更轻)

Zustand 示例:

npm install zustand
import create from 'zustand';const useStore = create(set => ({count: 0,inc: () => set(state => ({ count: state.count + 1 }))
}));function Counter() {const { count, inc } = useStore();return <button onClick={inc}>Count: {count}</button>;
}

8.4 动画库:Framer Motion

npm install framer-motion
import { motion } from 'framer-motion';<motion.div animate={{ x: 100 }} transition={{ duration: 1 }} />

8.5 UI 框架推荐

框架特点
Ant Design企业级组件,规范统一
MUIGoogle Material 风格
Chakra UI原子化、可组合性强的设计

使用 MUI 示例:

npm install @mui/material @emotion/react @emotion/styled
import Button from '@mui/material/Button';<Button variant="contained">按钮</Button>

8.6 构建工具推荐

工具特点
Vite快速启动,ESM 原生支持
Webpack插件/配置丰富,老牌稳定
Parcel零配置、快速构建

Vite 优势:默认支持 JSX、HMR 热更新,推荐作为主流 React 项目的构建工具。


九、部署与上线

9.1 构建项目

npm run build

9.2 免费部署平台

  • Vercel:https://vercel.com
  • Netlify:https://netlify.com
  • Github Pages:通过 gh-pages 插件

十、总结与学习路径建议

React 是现代前端开发者必备技能。学习路线推荐:

  1. 掌握 JSX、Hooks、组件设计;
  2. 深入状态管理与路由;
  3. 理解性能优化与大型项目结构;
  4. 延伸学习 Next.js、React Native、TS+React 项目实战等。

到这里,这篇文章就和大家说再见啦!我的主页里还藏着很多 篇 前端 实战干货,感兴趣的话可以点击头像看看,说不定能找到你需要的解决方案~
创作这篇内容花了很多的功夫。如果它帮你解决了问题,或者带来了启发,欢迎:
点个赞❤️ 让更多人看到优质内容
关注「前端极客探险家」🚀 每周解锁新技巧
收藏文章⭐️ 方便随时查阅
📢 特别提醒:
转载请注明原文链接,商业合作请私信联系
感谢你的阅读!我们下篇文章再见~ 💕

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86144.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛津大学开源视频中的开放世界目标计数!

视频中的开放世界目标计数 GitHub PaPer Niki Amini-Naieni nikianrobots.ox.ac.uk Andrew Zisserman azrobots.ox.ac.uk 视觉几何组&#xff08;VGG&#xff09;&#xff0c;牛津大学&#xff0c;英国 ​ 图 1&#xff1a;视频中的目标计数&#xff1a;给定顶行的视频&#…

什么是Sentinel?以及优缺点

Sentinel 是阿里巴巴开源的分布式系统流量控制组件&#xff0c;主要用于服务限流、熔断降级、系统负载保护等场景&#xff0c;帮助提高微服务系统的稳定性和可靠性。它以流量为切入点&#xff0c;通过对流量的监控与控制&#xff0c;保障服务在高并发或异常情况下的可用性。 S…

2025 MWC 上海盛大开幕,聚焦AI、5G-Advanced及开放API

全球商业领袖与政策制定者齐聚一堂,共同探讨中国在API创新中的引领地位与产业发展势头 2025年6月18日,上海——GSMA 2025 MWC 上海今日在上海浦东嘉里大酒店举行开幕式,正式拉开帷幕。本届为期三天的盛会在上海新国际博览中心(SNIEC)举行,汇聚约400位演讲嘉宾与思想领袖,带来主…

使用Python脚本进行日常管理

在IT行业&#xff0c;特别是在系统运维领域&#xff0c;效率和准确性是至关重要的。随着技术的发展&#xff0c;手动处理大量的服务器和网络设备变得越来越不可行。因此&#xff0c;自动化运维成为了解决这一问题的有效手段。Python&#xff0c;作为一种广泛使用的编程语言&…

HCIA-数据通信基础

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 本篇笔记是根据B站上的视频教程整理而成&#xff0c;感谢UP主的精彩讲解&#xff01;如果需要了解更多细节&#xff0c;可以参考以下视频&#xff1a;…

安全版V4.5密码加密算法由SM3改为MD5

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 文档用途 本文档用于指导瀚高数据库安全版V4.5的密码加密算法由SM3改为MD5 详细信息 1、用默认三权用户和普通用户登录数据库&#xff0c;修改密码…

MyBatis中#{}和${}的深度解析:SQL注入与动态拼接的终极抉择

MyBatis中#{}和${}的深度解析&#xff1a;SQL注入与动态拼接的终极抉择 摘要&#xff1a;在MyBatis的Mapper.xml文件中&#xff0c;#{}和${}这两个看似简单的符号&#xff0c;却隐藏着SQL安全与性能的核心秘密。本文将深入剖析它们的底层差异&#xff0c;并通过真实场景演示如何…

AWS多项目架构完全指南:基于App Runner的安全中转服务设计

引言:云原生架构的演进之路 在数字化转型浪潮中,企业常常面临这样的挑战:如何在保证安全隔离的前提下,快速为多个项目部署服务,并实现与现有系统的无缝集成?本文将以真实案例为基础,详细介绍如何利用AWS App Runner、Transit Gateway和VPC连接器等现代化服务,构建高可…

Selenium操作指南

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大家好&#xff0c;今天带大家一起系统的学习下模拟浏览器运行库Selenium&#xff0c;它是一个用于Web自动化测试及爬虫应用的重要工具。 Selenium测试直接运行在…

基于Qt开发的ModbusTcp主站软件开发教程​——从协议原理到工业级实现

目录 第一章 环境配置与库集成1. 安装Qt与Modbus模块2. 第三方库兼容性(备选方案)第二章 Modbus TCP协议与Qt类解析1. 协议核心要点2. Qt关键类说明第三章 主站连接管理与通信初始化1. 连接建立与断线重连2. 请求超时与响应机制第四章 数据读写操作实战1. 读取保持寄存器(功…

什么是缺口箱线图?如何绘制?

大家好&#xff0c;我是带我去滑雪&#xff01; 箱线图是一种用于展示数据分布特征的统计图表&#xff0c;又称为盒状图或盒须图。它主要通过一个“箱子”和延伸出的“须”来展示一组数据的中位数、上下四分位数、最大值、最小值以及异常值。箱子的中线表示中位数&#xff0c;上…

在visual studio中为C++程序安装缺失开源库

在visual studio中测试一个代码时出现include了一个之前没用过的开源库的情况&#xff0c;因为之前C用的少&#xff0c;这个问题比较基础&#xff0c;也没有找到能用的教程&#xff0c;就在这里记录一下解决过程&#xff0c;以备不时之需。 显然C和Visual Studio的组合不如pych…

CentOS加密技术全指南

文件系统加密 LUKS (Linux Unified Key Setup) 全盘加密配置方法 安装前加密&#xff08;Anaconda安装向导选项&#xff09; 在安装CentOS时选择"Encrypt my data"选项设置强密码&#xff08;建议20字符&#xff0c;混合大小写、数字和特殊符号&#xff09;密钥槽管…

纯血HarmonyOS5 打造小游戏实践:绘画板(附源文件)

OS 应用整体架构与技术栈 该绘图应用采用了鸿蒙系统推荐的ArkUI框架进行开发&#xff0c;基于TypeScript语言编写&#xff0c;充分利用了鸿蒙系统的图形渲染和文件操作能力。应用整体架构遵循MVVM&#xff08;Model-View-ViewModel&#xff09;模式&#xff0c;通过State装饰…

数据分析和可视化:Py爬虫-XPath解析章节要点总结

重要知识点 XPath 概述&#xff1a;XPath 是一门可以在 XML 文件中查找信息的语言&#xff0c;也可用于 HTML 文件。它功能强大&#xff0c;提供简洁明了的路径表达式和多个函数&#xff0c;用于字符串、数值、时间比较等。1999 年成为 W3C 标准&#xff0c;常用于爬虫中抓取网…

深入理解PHP中的生成器(Generators)

创建一个生成器非常简单。你只需要像定义普通函数一样定义它&#xff0c;但是使用yield关键字来产出值。例如&#xff0c;以下是一个简单的斐波那契数列生成器&#xff1a; function fibonacci() {$num1 0;$num2 1;while (true) {yield $num1;$temp $num1 $num2;$num1 $n…

ubuntu 系统 pgm图片和png相互转化

ubuntu 系统 pgm图片和png相互转化。 安装转化工具&#xff1a; sudo apt-get install imagemagick pgm转为png指令如下: convert input.pgm output.png png转为pgm指令如下: convert input.png output.pgm

leetcode:98. 验证二叉搜索树

学习要点 加深纯递归算法的理解 题目链接 98. 验证二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法&#xff1a;纯递归 vector<int> v;void dfs(TreeNode* root){if(root nullptr){return;}dfs(root->left);v.push_back(root->val);dfs(root…

如何确定IP的缺省子网掩码是多少?

IP地址 201.100.200.1 的缺省子网掩码由其 IP地址类别 决定。以下是判断步骤&#xff1a; 1. 确定IP地址类别 IPv4地址分为 A、B、C、D、E 五类&#xff0c;根据第一个字节&#xff08;前8位&#xff09;的范围划分&#xff1a; A类&#xff1a;1.0.0.0 ~ 126.255.255.255&am…

Vue.js 粒子连线动画组件 - FlyingLines

Vue.js 粒子连线动画组件 - FlyingLines 使用指南 &#x1f31f; 简介 FlyingLines 是一个基于 Vue.js 的炫酷粒子连线动画组件&#xff0c;可以为您的网站添加动态的背景效果。该组件具有以下特点&#xff1a; ✨ 流畅动画&#xff1a;基于 Canvas 的高性能渲染&#x1f5b…