React 前端框架实战教程

news2025/1/27 8:56:19

📝个人主页🌹:一ge科研小菜鸡-CSDN博客
🌹🌹期待您的关注 🌹🌹

引言

React 是由 Facebook 开发的前端 JavaScript 库,旨在构建高效、灵活的用户界面,尤其适用于单页应用(SPA)。它采用组件化开发模式,并使用虚拟 DOM 技术,提高应用的性能和可维护性。React 目前已成为最流行的前端框架之一,被广泛应用于各类 Web 应用开发中。

本教程将详细介绍 React 的核心概念、组件开发、状态管理、路由配置、API 调用以及最佳实践,并提供代码示例,帮助开发者快速上手 React。


1. React 核心概念

React 的核心概念主要包括:

概念说明示例
组件(Component)UI 的最小单元,分为类组件和函数组件function MyComponent() {...}
JSXJavaScript 语法扩展,用于描述 UI 结构<h1>Hello, React!</h1>
状态(State)组件内部数据,驱动 UI 更新useState
属性(Props)组件间传递数据的方式<MyComponent name="React"/>
虚拟 DOM提升性能的高效 DOM 变更处理React.createElement()
生命周期组件的创建、更新和销毁过程componentDidMount

2. React 开发环境搭建

2.1 安装 Node.js

首先,安装最新的 Node.js 版本,可前往 Node.js 官方网站 下载。

2.2 创建 React 项目

使用 Create React App(CRA)快速创建项目:

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

项目结构:

my-react-app/
│-- node_modules/
│-- public/
│-- src/
│   ├── App.js
│   ├── index.js
│   ├── components/
│   ├── styles/
│   ├── services/
│-- package.json
│-- README.md

2.3 运行项目

执行以下命令启动 React 开发服务器:

npm start

3. React 组件开发

3.1 函数组件与类组件

函数组件示例(推荐)
import React from 'react';

function Welcome(props) {
  return <h1>欢迎, {props.name}!</h1>;
}

export default Welcome;
类组件示例
import React, { Component } from 'react';

class Welcome extends Component {
  render() {
    return <h1>欢迎, {this.props.name}!</h1>;
  }
}

export default Welcome;

3.2 组件的状态管理

使用 useState 管理组件的状态:

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>当前计数: {count}</p>
      <button onClick={() => setCount(count + 1)}>增加</button>
    </div>
  );
}

export default Counter;

4. 事件处理与数据绑定

在 React 中,事件处理类似于 DOM 操作,但需使用 CamelCase 方式定义事件。

4.1 事件绑定示例

function ButtonClick() {
  function handleClick() {
    alert('按钮被点击了!');
  }

  return <button onClick={handleClick}>点击我</button>;
}

export default ButtonClick;

5. React 路由(React Router)

React Router 是一个用于管理 SPA 应用页面导航的库。

5.1 安装 React Router

npm install react-router-dom

5.2 配置路由

import React from 'react';
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';

function Home() {
  return <h2>首页</h2>;
}

function About() {
  return <h2>关于我们</h2>;
}

function App() {
  return (
    <Router>
      <nav>
        <Link to="/">首页</Link> | <Link to="/about">关于</Link>
      </nav>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </Router>
  );
}

export default App;

6. 状态管理(Redux)

React 应用的状态管理通常可以使用 Redux 来实现。

6.1 安装 Redux

npm install redux react-redux

6.2 创建 Redux Store

import { createStore } from 'redux';

const initialState = { count: 0 };

function counterReducer(state = initialState, action) {
  switch (action.type) {
    case 'INCREMENT':
      return { count: state.count + 1 };
    default:
      return state;
  }
}

const store = createStore(counterReducer);
export default store;

6.3 连接 React 组件

import React from 'react';
import { useSelector, useDispatch } from 'react-redux';

function Counter() {
  const count = useSelector(state => state.count);
  const dispatch = useDispatch();

  return (
    <div>
      <p>计数: {count}</p>
      <button onClick={() => dispatch({ type: 'INCREMENT' })}>增加</button>
    </div>
  );
}

export default Counter;

7. React API 请求(Axios)

React 中常用 Axios 进行 API 请求。

7.1 安装 Axios

npm install axios

7.2 API 请求示例

import React, { useEffect, useState } from 'react';
import axios from 'axios';

function DataFetch() {
  const [data, setData] = useState([]);

  useEffect(() => {
    axios.get('https://jsonplaceholder.typicode.com/posts')
      .then(response => setData(response.data))
      .catch(error => console.error('数据获取失败:', error));
  }, []);

  return (
    <ul>
      {data.map(post => (
        <li key={post.id}>{post.title}</li>
      ))}
    </ul>
  );
}

export default DataFetch;

8. 部署 React 应用

使用以下命令打包 React 应用以进行生产部署:

npm run build

打包后的文件将存储在 build/ 目录,可直接部署至服务器或托管于 GitHub Pages 或 Netlify。


9. 结论与展望

React 提供了现代化的前端开发体验,凭借其强大的组件化、状态管理及生态系统,已成为前端开发的首选框架。

下一步学习建议:

  1. 深入学习 Hooks(useEffectuseContext
  2. 探索高级状态管理工具,如 Recoil、Zustand
  3. 了解 React 服务端渲染(Next.js)

希望本教程能够帮助您快速掌握 React 开发技能!

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

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

相关文章

c语言中的数组(上)

数组的概念 数组是⼀组相同类型元素的集合&#xff1b; 数组中存放的是1个或者多个数据&#xff0c;但是数组元素个数不能为0。 数组中存放的多个数据&#xff0c;类型是相同的。 数组分为⼀维数组和多维数组&#xff0c;多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…

Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)

目录 前言1. 基本知识2. Demo3. 实战代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&am…

【记录】日常|从零散记录到博客之星Top300的成长之路

文章目录 shandianchengzi 2024 年度盘点概述写作风格简介2024年的创作内容总结 shandianchengzi 2024 年度盘点 概述 2024年及2025年至今我创作了786即84篇文章&#xff0c;加上这篇就是85篇。 很荣幸这次居然能够入选博客之星Top300&#xff0c;这个排名在我之前的所有年份…

定时器按键tim_key模版

低优先级放在高优先级内势必是程序卡死 把高优先级放到低优先级内&#xff0c;会使程序卡死 可修改 Debuger调试方法 Pwm rcc #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPI…

Swing使用MVC模型架构

什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…

ui-automator定位官网文档下载及使用

一、ui-automator定位官网文档简介及下载 AndroidUiAutomator&#xff1a;移动端特有的定位方式&#xff0c;uiautomator是java实现的&#xff0c;定位类型必须写成java类型 官方地址&#xff1a;https://developer.android.com/training/testing/ui-automator.html#ui-autom…

gitee——报错修改本地密码

有时候当我们向远端push本地的仓库时会有一些报错的行为。 如下&#xff1a; 这是因为我们在gitee修改了密码时&#xff0c;本地还没有更新提交&#xff0c;总是报错 解决修改密码报错 如下&#xff1a; 1.在本地点击搜索栏找到控制面板 步骤如下

小盒科技携手体验家,优化智能教育服务体验,打造在线教育新高度

北京小盒科技有限公司&#xff08;简称“小盒科技”&#xff0c;由“作业盒子”更名而来&#xff09;是一家专注于教育科技的公司&#xff0c;致力于利用人工智能、大数据等先进技术&#xff0c;为中小学教育提供创新的解决方案和产品。 近日&#xff0c;「小盒科技」携手体…

Docker Hub 全面解析及应对策略

在现代 DevOps 和容器化应用开发中&#xff0c;Docker Hub 是一个不可或缺的工具。然而&#xff0c;一些地区或企业对 Docker Hub 的访问受到限制&#xff0c;甚至全面禁止。这种现象引发了开发者和运维人员的广泛关注。那么&#xff0c;为什么 Docker Hub 会被禁用&#xff1f…

分布式理解

分布式 如何理解分布式 狭义的分布是指&#xff0c;指多台PC在地理位置上分布在不同的地方。 分布式系统 分布式系**统&#xff1a;**多个能独立运行的计算机&#xff08;称为结点&#xff09;组成。各个结点利用计算机网络进行信息传递&#xff0c;从而实现共同的“目标或者任…

macOS使用LLVM官方发布的tar.xz来安装Clang编译器

之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz&#xff0c;那MacOS应该也是可以安装的。 笔者2015款MBP笔记本&#xff0c;CPU是intel的&#xff0c;出厂…

ppp综合实验

IP地址 r1 r2 r3 r4 hdlc封装 pap认证 r2 r3 chap认证 r2 r4 MGRE 主认证 [r1]int Tunnel 0/0/0 [r1-Tunnel0/0/0]ip add 192.168.4.1 24 [r1-Tunnel0/0/0]tunnel-protocol gre p2mp [r1-Tunnel0/0/0]source 12.1.1.1 [r1-Tunnel0/0/0]nhrp entry multicast dynamic [r1-Tu…

HBuilderX构建Vue项目

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl HBuilderX概述 HBuilderX是一款专为开发者设计的高效开发工具&#xff0c;致力于提升开发者的编码效率和体验。HBuilderX既适合追求极致效率的极客&#xff0c;也适合希望简…

基于微信小程序的英语学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

使用 Confluent Cloud 的 Elasticsearch Connector 部署 Elastic Agent

作者&#xff1a;来自 Elastic Nima Rezainia Confluent Cloud 用户现在可以使用更新后的 Elasticsearch Sink Connector 与 Elastic Agent 和 Elastic Integrations 来实现完全托管且高度可扩展的数据提取架构。 Elastic 和 Confluent 是关键的技术合作伙伴&#xff0c;我们很…

JDK17 HashMap

HashMap ArrayList用动态数组存放元素&#xff0c;而HashMap用动态数组&#xff08;桶&#xff09;存储键值对。 如果两个键值对映射到桶同一个索引&#xff0c;则称为散列冲突。HashMap采用拉链法解决冲突&#xff0c;即桶中每个索引指向一个链表或者红黑树&#xff0c;多个键…

ansible自动化运维实战--通过role远程部署nginx并配置(8)

文章目录 1、准备工作2、创建角色结构3、编写任务4、准备配置文件&#xff08;金甲模板&#xff09;5、编写变量6、编写处理程序7、编写剧本8、执行剧本Playbook9、验证-游览器访问每台主机的nginx页面 在 Ansible 中&#xff0c;使用角色&#xff08;Role&#xff09;来远程部…

Python网络自动化运维---用户交互模块

文章目录 目录 文章目录 前言 实验环境准备 一.input函数 代码分段解析 二.getpass模块 前言 在前面的SSH模块章节中&#xff0c;我们都是将提供SSH服务的设备的账户/密码直接写入到python代码中&#xff0c;这样很容易导致账户/密码泄露&#xff0c;而使用Python中的用户交…

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明&#xff0c;虽然结果正确&#xff0c;但是&#xff0c;大模型既绕了弯路&#xff0c;又有数值计算错误。 与前面相同&#xff0c;再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…

mybatis(78/134)

前天学了很多&#xff0c;关于java的反射机制&#xff0c;其实跳过了new对象&#xff0c;然后底层生成了字节码&#xff0c;创建了对应的编码。手搓了一遍源码&#xff0c;还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …