React前端框架:现代网页开发的基石(附带构建简单任务管理应用案例代码)

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

React 是由 Facebook 开发并开源的前端框架,用于构建用户界面。它通过虚拟DOM、高效的渲染机制和组件化的开发模式,使开发者能够创建可扩展和高性能的应用程序。本文将详细探讨 React 的核心概念、实际案例代码以及在开发过程中的最佳实践。

1. React 简介与核心优势

1.1 什么是 React?

React 是一个用于构建用户界面的 JavaScript 库,专注于实现视图层。React 的主要目的是简化用户界面的开发,通过引入组件化和声明式编程,使代码结构更清晰、可维护性更高。

1.2 React 的核心优势

  • 组件化开发:React 允许开发者将 UI 拆分成独立的组件,这样每个组件都可以单独维护和复用。
  • 虚拟 DOM:React 使用虚拟 DOM 以提升性能。更新时,它会计算出实际 DOM 的差异,并只应用必要的更改。
  • 单向数据流:数据在 React 中以单向的方式流动,有助于更好的数据管理和调试。
  • 强大的社区支持:React 拥有丰富的资源、教程和开源项目。

2. React 核心概念详解

2.1 JSX 语法

JSX 是一种类似 HTML 的 JavaScript 语法扩展,允许在 JavaScript 中编写 HTML 结构。React 的组件通常通过 JSX 编写,保持了 JavaScript 逻辑和 UI 的紧密结合。

示例代码

function Welcome() {return <h1>Hello, React!</h1>;
}

JSX 语法会在编译时转换为 React.createElement 调用。

2.2 组件化开发

React 的组件可以是函数组件或类组件。函数组件较为简洁,推荐用于大多数开发场景,而类组件通常用于更复杂的逻辑(如需要状态管理)。

函数组件示例

function Greeting(props) {return <h2>Welcome, {props.name}!</h2>;
}

类组件示例

class Greeting extends React.Component {render() {return <h2>Welcome, {this.props.name}!</h2>;}
}

2.3 State 和 Props

  • Props(属性):父组件传递给子组件的数据,是不可变的。
  • State(状态):组件内部可变的数据,可以通过 setState 方法更新。

示例代码

class Counter extends React.Component {constructor(props) {super(props);this.state = { count: 0 };}increment = () => {this.setState({ count: this.state.count + 1 });};render() {return (<div><p>Count: {this.state.count}</p><button onClick={this.increment}>Increment</button></div>);}
}

3. 创建和管理 React 应用

3.1 使用 Create React App

Create React App 是官方提供的脚手架工具,用于快速搭建 React 应用。它自动配置了开发环境,支持 Webpack 和 Babel。

安装和启动

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

3.2 项目结构概览

一个典型的 React 项目结构如下:

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

index.js 是应用的入口文件,App.js 是根组件,其他自定义组件放在 components 文件夹。

3.3 React Hooks 简介

React Hooks 是 React 16.8 引入的新特性,它允许在函数组件中使用 state 和其他 React 特性,如 useStateuseEffect

useState 示例

import React, { useState } from 'react';function Counter() {const [count, setCount] = useState(0);return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
}

useEffect 示例

import React, { useState, useEffect } from 'react';function Timer() {const [time, setTime] = useState(0);useEffect(() => {const interval = setInterval(() => {setTime(time + 1);}, 1000);return () => clearInterval(interval);}, [time]);return <p>Time: {time}</p>;
}

4. 项目案例:构建简单的任务管理应用

4.1 功能概述

我们将实现一个简单的任务管理应用,用户可以添加任务、标记任务完成、删除任务。

4.2 组件设计

  • App:根组件,包含所有子组件。
  • TaskInput:用于输入新任务。
  • TaskList:显示任务列表。
  • TaskItem:单个任务项,包含任务名、完成按钮和删除按钮。

4.3 实现代码

App.js

import React, { useState } from 'react';
import TaskInput from './components/TaskInput';
import TaskList from './components/TaskList';function App() {const [tasks, setTasks] = useState([]);const addTask = (task) => {setTasks([...tasks, { id: Date.now(), name: task, completed: false }]);};const toggleComplete = (id) => {setTasks(tasks.map(task => task.id === id ? { ...task, completed: !task.completed } : task));};const deleteTask = (id) => {setTasks(tasks.filter(task => task.id !== id));};return (<div><h1>Task Manager</h1><TaskInput addTask={addTask} /><TaskList tasks={tasks} toggleComplete={toggleComplete} deleteTask={deleteTask} /></div>);
}export default App;

TaskInput.js

import React, { useState } from 'react';function TaskInput({ addTask }) {const [input, setInput] = useState('');const handleSubmit = (e) => {e.preventDefault();if (input.trim()) {addTask(input);setInput('');}};return (<form onSubmit={handleSubmit}><input type="text" value={input} onChange={(e) => setInput(e.target.value)} placeholder="Add a new task"/><button type="submit">Add</button></form>);
}export default TaskInput;

TaskList.js

import React from 'react';
import TaskItem from './TaskItem';function TaskList({ tasks, toggleComplete, deleteTask }) {return (<ul>{tasks.map(task => (<TaskItem key={task.id} task={task} toggleComplete={toggleComplete} deleteTask={deleteTask} />))}</ul>);
}export default TaskList;

TaskItem.js

import React from 'react';function TaskItem({ task, toggleComplete, deleteTask }) {return (<li><span style={{ textDecoration: task.completed ? 'line-through' : 'none' }}onClick={() => toggleComplete(task.id)}>{task.name}</span><button onClick={() => deleteTask(task.id)}>Delete</button></li>);
}export default TaskItem;

5. React 项目的优化与部署

5.1 代码优化技巧

  • 使用 React.memo:避免不必要的重新渲染。
  • 使用 useCallbackuseMemo:优化函数和复杂计算。
  • 代码拆分与懒加载:使用 React.lazy()Suspense 进行组件懒加载,减少初始加载时间。

5.2 部署到生产环境

React 应用可以使用 npm run build 打包,生成的文件可部署到任何静态文件服务器,如 Netlify、Vercel 或 GitHub Pages。

总结

React 是现代网页开发中不可或缺的工具,通过其组件化和声明式编程风格,开发者能够快速构建出可扩展和高效的应用。掌握 React 的核心概念和最佳实践可以帮助开发者提高开发效率并打造高质量的前端项目。

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

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

相关文章

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了&#xff0c;但是需要调用腾讯云翻译&#xff0c;一直没成功。 第一步就是&#xff0c;按照这上面方法做&#xff1a;百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是&#xff1a;Zotero PDF translat翻译&#xff1a;申请腾讯翻译接口 主要是…

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…

如何以开源加速AI企业落地,红帽带来新解法

CSDN 看到&#xff0c;生成式 AI 的火爆正在引发计算、开发、交互三大范式全面的升级和转换&#xff0c;全行业或将迎来一次全新的科技变革周期&#xff0c;可能比移动与云计算变革更加剧烈。不过 AI 经历了追求千亿模型效果和芯片、集群硬件的军备竞赛后&#xff0c;如何真正落…

vue的组件使用

1.安装element plus组件库 npm install element-plus --save 2. 3.在页面使用

人保财险(外包)面试分享

前言&#xff1a; 这是本月面的第三家公司&#xff0c;太难了兄弟们&#xff0c;外包都不好找了&#xff0c;临近年底&#xff0c;金九银十已经错过了&#xff0c;金三银四虽然存在&#xff0c;但按照这几年的行情&#xff0c;金九银十和金三银四其实已经是不复存在了&#xf…

Linux-c TCP服务模型

1、TCP模型&#xff0c;服务端与客户端的搭建时序图 2、TCP模型&#xff0c;在创建阶段和通信阶段&#xff0c;对套接字的理解 2.1、tcp连接阶段 2.2、tcp通信状态 一个服务端与多个客户端的通信状态 TCP与UDP的对比 &#xff08;下图是笔者理解所画&#xff0c;可能也许有错…

卡码网KamaCoder 127. 骑士的攻击

题目来源&#xff1a;127. 骑士的攻击 C题解&#xff08;来源A * 算法精讲 &#xff08;A star算法&#xff09; | 代码随想录&#xff09;&#xff1a;Astar Astar 是一种 广搜的改良版。 有的是 Astar是 dijkstra 的改良版。 其实只是场景不同而已 我们在搜索最短路的时候&…

浅谈语言模型推理框架 vLLM 0.6.0性能优化

在此前的大模型技术实践中&#xff0c;我们介绍了加速并行框架Accelerate、DeepSpeed及Megatron-LM。得益于这些框架的助力&#xff0c;大模型的分布式训练得以化繁为简。 然而&#xff0c;企业又该如何将训练完成的模型实际应用部署&#xff0c;持续优化服务吞吐性能&#xf…

闯关leetcode——3222. Find the Winning Player in Coin Game

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-winning-player-in-coin-game/description/ 内容 You are given two positive integers x and y, denoting the number of coins with values 75 and 10 respectively. Alice and Bob a…

斗破QT编程入门系列之二:GUI应用程序设计基础:UI文件(四星斗师)

斗破Qt目录&#xff1a; 斗破Qt编程入门系列之前言&#xff1a;认识Qt&#xff1a;Qt的获取与安装&#xff08;四星斗师&#xff09; 斗破QT编程入门系列之一&#xff1a;认识Qt&#xff1a;初步使用&#xff08;四星斗师&#xff09; 斗破QT编程入门系列之二&#xff1a;认识…

高级 HarmonyOS主题课—— 帮助快速构建各种文本识别应用的课后习题

天地不仁&#xff0c;以万物为刍狗&#xff1b; 圣人不仁&#xff0c;以百姓为刍狗。 天地之间&#xff0c;其犹橐龠乎&#xff1f; 虚而不屈&#xff0c;动而俞出。 多闻数穷&#xff0c;不若守于中。 本文内容主要来自 <HarmonyOS主题课>帮助快速构建各种文本识别应用 …

达梦数据库DM管理工具增删改不生效怎么办?如何设置事务自动提交?

前言 我在使用达梦数据库DM时&#xff0c;一开始使用的是达梦数据库自带的连接工具DM管理工具。自带的有它自己的好处&#xff0c;起码对于修改新增字段等是比较兼容的。后面我发现DBeaver也是支持连接达梦数据库的&#xff0c;所以后面用DBeaver也在连接达梦数据库。 我在一…

力扣排序455题(分发饼干)

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。 但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i],这是能 让孩子们满足胃口的饼干的最小尺寸;并且每块饼 干j&#xff0c;都有一个尺寸 s[j]。如果 s[j]> g[i]&…

Hadoop---MapReduce(3)

MapTask工作机制 &#xff08;1&#xff09;Read阶段&#xff1a;MapTask通过InputFormat获得的RecordReader&#xff0c;从输入InputSplit中解析出一个个key/value。 &#xff08;2&#xff09;Map阶段&#xff1a;该节点主要是将解析出的key/value交给用户编写map()函数处理&…

ssm052游戏攻略网站的设计与实现+vue(论文+源码)-kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本游戏攻略网站就是在这…

Word大珩助手:超大数字怎么读?35位数字?69位数字?

俄罗斯日前对谷歌开出了20000000000000000000000000000000000&#xff08;35位数字&#xff09;美元的罚款 这一数字远超全球GDP总和&#xff0c;消息一出很快就登上热搜。 面对这样一个庞大的数字&#xff0c;人们不禁好奇&#xff0c;这样的数字该如何读出来&#xff1f; …

VisionPro —— CogIPOneImgeTool工具详解

CogIPOneImageTool工具主要用来对单张图像进行算法处理操作 CogIPOneImgeTool简介 CogIPOneImageTool 工具可完成高斯平滑、高通滤波和图像量化等基本图像处理操作。Image Processing One Image 工具编辑控件为此工具提供图形用户界面。 Image Processing Operations (图像处…

sql数据库-DQL-条件查询

条件查询 SELECT 字段列表 FROM 表名 WHERE 条件列表; 条件列表 比较运算符功能> 大于>大于等于 < 小于<小于等于等于!不等于between...and...某个范围之间&#xff08;闭区间&#xff09;IN(...)在in之后的列表中的值&#xff0c;多选一LIKE 通…

更快更强 | HP15加热台新品!Max温度350度,200度只需60秒!30~150W功率可调,恒温加热和回流焊双模式!

正点原子HP15加热台更快更强&#xff01;最高温度可达350度&#xff0c;200度只需60秒&#xff01;30~150W功率可调&#xff0c;恒温加热和回流焊双模式&#xff01; HP15是正点原子全新推出的迷你恒温加热台&#xff0c;设备支持30~150W功率可调&#xff0c;在150W功率下从室温…

WebRTC 环境搭建

主题 本文主要描述webrtc开发过程中所需的环境搭建 环境&#xff1a; 运行环境&#xff1a;ubuntu 20.04 Node.js环境搭建 安装编译 Node.js 所需的依赖包: sudo apt-get update sudo apt-get install -y build-essential libssl-dev 下载 Node.js 源码: curl -sL htt…