首页/新闻资讯/正文详情

一看就懂的ReactJs入门教程-精华版

发布时间:2026/11/4 16:42:15 来源:云帆数科 栏目:资讯中心
一看就懂的ReactJs入门教程-精华版
一看就懂的ReactJs入门教程-精华版一、React是什么为什么你需要它React是一个用于构建用户界面的JavaScript库由Facebook开发并维护。它的核心思想是“组件化”——将复杂的UI拆分成独立、可复用的小块每个小块管理自己的状态和逻辑。React的三大核心特性是-声明式编程你只需要描述UI应该是什么样子React会自动处理DOM更新。-组件化每个组件都是一个独立的模块便于开发和维护。-虚拟DOM通过高效的Diff算法只更新变化的部分提升性能。如果你是前端新手React能帮你快速构建动态、交互性强的Web应用如果你有经验React能让你写出更清晰、可维护的代码。## 二、环境搭建从零开始在开始编码之前你需要安装Node.js推荐使用16版本和一个代码编辑器如VS Code。然后我们使用官方推荐的脚手架工具create-react-app快速创建项目bashnpx create-react-app my-first-react-appcd my-first-react-appnpm start这条命令会创建一个名为my-first-react-app的文件夹并启动开发服务器。浏览器会自动打开http://localhost:3000你看到的就是React默认的欢迎页面。## 三、核心概念JSX与组件### 1. JSX在JavaScript中写HTMLJSX是React的语法扩展它允许你在JavaScript代码中直接写类似HTML的标记。看一个简单例子jsx// src/App.jsimport React from react;function App() { // 这是一个JSX表达式 const name React学习者; const element h1你好{name}/h1; // 使用花括号嵌入JavaScript表达式 return element;}export default App;关键点- JSX中的花括号{}用于嵌入JavaScript表达式。- JSX最终会被Babel编译为React.createElement()调用。- 每个JSX表达式必须有且只有一个根元素可以用空标签.../包裹。### 2. 函数组件最简单的组件形式React中有两种组件函数组件和类组件。现代React推荐使用函数组件配合Hooks。下面是一个可运行的完整例子jsx// src/Greeting.jsimport React from react;// 这是一个函数组件接收props参数function Greeting(props) { return ( div classNamegreeting-card h2欢迎, {props.username}!/h2 p今天是{new Date().toLocaleDateString()}/p /div );}export default Greeting;然后在App.js中使用它jsx// src/App.jsimport React from react;import Greeting from ./Greeting; // 导入组件function App() { return ( div classNameApp Greeting username小明 / {/* 通过属性传递数据 */} Greeting username小红 / /div );}export default App;运行效果页面上会显示两个卡片分别欢迎“小明”和“小红”并显示今天的日期。## 四、状态管理useState Hook组件需要动态数据这就是“状态”State的用武之地。useState是React内置的Hook用于在函数组件中添加状态。### 1. 基本用法下面是一个计数器组件展示如何使用useStatejsx// src/Counter.jsimport React, { useState } from react;function Counter() { // 声明一个状态变量 count初始值为0 // setCount 是用来更新 count 的函数 const [count, setCount] useState(0); return ( div p当前计数{count}/p button onClick{() setCount(count 1)}增加/button button onClick{() setCount(count - 1)}减少/button button onClick{() setCount(0)}重置/button /div );}export default Counter;工作原理-useState(0)返回一个数组[当前值, 更新函数]。- 当用户点击按钮调用setCount更新状态React会自动重新渲染组件。- 每次渲染count都保持最新的值。### 2. 复杂状态对象和数组状态可以是任何类型。下面是一个管理待办事项的例子jsx// src/TodoList.jsimport React, { useState } from react;function TodoList() { const [todos, setTodos] useState([]); // 初始为空数组 const [inputValue, setInputValue] useState(); const addTodo () { if (inputValue.trim() ) return; // 创建新待办事项使用展开运算符保留原数组 setTodos([...todos, { id: Date.now(), text: inputValue, done: false }]); setInputValue(); // 清空输入框 }; const toggleTodo (id) { setTodos(todos.map(todo todo.id id ? { ...todo, done: !todo.done } : todo )); }; return ( div h2我的待办事项/h2 input value{inputValue} onChange{(e) setInputValue(e.target.value)} placeholder输入新任务 / button onClick{addTodo}添加/button ul {todos.map(todo ( li key{todo.id} style{{ textDecoration: todo.done ? line-through : none }} onClick{() toggleTodo(todo.id)} {todo.text} /li ))} /ul /div );}export default TodoList;关键概念- 不要直接修改状态如todos.push()而是通过setState创建新数组。- 使用map、filter等方法处理数组状态。- 列表渲染时每个子元素必须有唯一的key属性这里使用todo.id。## 五、副作用处理useEffectuseEffect让你能在函数组件中执行副作用操作比如数据获取、订阅事件或手动修改DOM。### 1. 基本用法下面是一个在组件挂载时获取数据的例子jsx// src/UserList.jsimport React, { useState, useEffect } from react;function UserList() { const [users, setUsers] useState([]); const [loading, setLoading] useState(true); useEffect(() { // 模拟API请求 setTimeout(() { const fakeUsers [ { id: 1, name: 张三 }, { id: 2, name: 李四 }, { id: 3, name: 王五 } ]; setUsers(fakeUsers); setLoading(false); }, 2000); }, []); // 空数组表示只在组件挂载时执行 if (loading) return div加载中.../div; return ( ul {users.map(user ( li key{user.id}{user.name}/li ))} /ul );}export default UserList;依赖数组-[]只在组件挂载时执行一次。-[count]当count变化时重新执行。- 不传每次渲染都执行。### 2. 清理副作用如果你的副作用需要清理如清除定时器、取消订阅可以在useEffect中返回一个清理函数jsxuseEffect(() { const timer setInterval(() { console.log(每秒执行); }, 1000); // 清理函数组件卸载时清除定时器 return () clearInterval(timer);}, []);## 六、高级主题自定义Hook自定义Hook是提取组件逻辑的利器它让你能复用状态逻辑而无需修改组件结构。### 示例useCounter Hookjsx// src/hooks/useCounter.jsimport { useState } from react;function useCounter(initialValue 0) { const [count, setCount] useState(initialValue); const increment () setCount(count 1); const decrement () setCount(count - 1); const reset () setCount(initialValue); return { count, increment, decrement, reset };}export default useCounter;然后在组件中使用jsx// src/AdvancedCounter.jsimport React from react;import useCounter from ./hooks/useCounter;function AdvancedCounter() { const { count, increment, decrement, reset } useCounter(10); return ( div p计数{count}/p button onClick{increment}/button button onClick{decrement}-/button button onClick{reset}重置到10/button /div );}export default AdvancedCounter;优势你可以在多个组件间共享这个useCounter逻辑而无需重复代码。## 七、最佳实践与总结### 1. 组件设计原则-单一职责每个组件只做一件事。-状态提升多个组件共享状态时将状态提升到它们的共同父组件。-避免过度优化先用最简单的方式实现再考虑性能优化。### 2. 常见陷阱- 不要在循环、条件或嵌套函数中调用Hooks必须在顶层。- 状态更新是异步的不要依赖立即获取更新后的值。- 使用key帮助React高效更新列表。### 3. 总结恭喜你你已经掌握了React的核心概念- ✅ JSX语法与组件化开发- ✅ 使用useState管理组件状态- ✅ 使用useEffect处理副作用- ✅ 自定义Hook复用逻辑- ✅ 列表渲染与事件处理React的学习曲线并不陡峭关键是动手实践。建议从简单的计数器、待办列表开始逐步挑战更复杂的项目。记住React官方文档react.dev是最好的学习资源遇到问题时多查阅它。现在关闭这篇文章打开编辑器开始你的第一个React项目吧

相关推荐

基于HarmonyOS的AI辩论赛论点生成——从对齐到评估的全流程技术实践
基于HarmonyOS的AI辩论赛论点生成——从对齐到评估的全流程技术实践

基于HarmonyOS的AI辩论赛论点生成——从对齐到评估的全流程技术实践 一、项目背景与需求分析(Align) 1.1 场景痛点分析 在现代数字生活中,用户对辩论赛论点生成的需求日益增长。传统的辩论赛论点生成方式存在效率低下、个性化不足等问题。通过… · 2026/11/4 16:41:25

Agentic Routing:每一轮对话都用“合适模型”,每一次路由都在“正向进化”
Agentic Routing:每一轮对话都用“合适模型”,每一次路由都在“正向进化”

Agentic Routing:每一轮对话都用“合适模型”,每一次路由都在“正向进化”原创 OpenSquilla OpenSquilla 基元律动 2026年7月16日 11:00 北京Agentic Routing:每一轮对话都用“合适模型”,每一次路由都在“正向进化”这一版我们… · 2026/9/17 23:00:08

2个月估值从88亿暴涨到680亿!最大AI中转站OpenRouter要被收购了
2个月估值从88亿暴涨到680亿!最大AI中转站OpenRouter要被收购了

2个月估值从88亿暴涨到680亿!最大AI中转站OpenRouter要被收购了ASI启示录 ASI启示录 新智元 2026年7月24日 15:51 北京新智元报道 Stripe 正在谈判收购 OpenRouter。据《华尔街日报》和 The Information 分别援引知情人士消息,交易价格可能接近 100 亿… · 2026/9/22 12:48:38

具身智能免示教焊接系统核心技术解析与应用
具身智能免示教焊接系统核心技术解析与应用

1. 项目概述:具身智能免示教焊接系统解析 在工业制造领域,焊接工艺的智能化升级一直是行业痛点。传统焊接机器人需要繁琐的示教编程,对操作人员技术要求高,且难以适应复杂多变的工作场景。集萃智造最新推出的具身智能免示教焊接系… · 2026/11/4 16:41:28

具身智能免示教焊接技术解析与应用
具身智能免示教焊接技术解析与应用

1. 项目概述:具身智能免示教焊接技术解析在工业制造领域,焊接工艺的智能化升级一直是行业痛点。传统焊接机器人需要耗费大量时间进行路径示教和参数调试,而集萃智造最新推出的具身智能免示教焊接系统,正在彻底改变这一现状。这套系… · 2026/11/4 16:41:28

数据库读写分离架构的实践陷阱与解决方案
数据库读写分离架构的实践陷阱与解决方案

1. 数据库读写分离的典型困境第一次接触读写分离架构时,我天真地以为只要把SQL语句按读写类型分发到不同数据库实例就万事大吉。直到某天凌晨2点被报警短信惊醒——用户提交的订单数据在页面上消失了。这个事故让我付出了连续36小时紧急修复的代价,也让我… · 2026/11/4 16:41:28

UML网上订餐系统:从建模到可运行代码的完整闭环
UML网上订餐系统:从建模到可运行代码的完整闭环

简介:本资源是一份完整的UML面向对象分析与设计教学实践报告,面向软件工程、计算机专业本科生及初学系统建模的开发者,聚焦网上订餐系统的全周期UML建模过程。内容涵盖需求模型(用户权限管理、注册/登录/订单/餐品检索等核心用例&… · 2026/11/4 16:41:28

数据库读写分离实战:核心原理与常见问题解决方案
数据库读写分离实战:核心原理与常见问题解决方案

1. 数据库读写分离的常见误区与实战解析 第一次接触读写分离时,我天真地以为只要简单配置主从复制就能高枕无忧。直到某天凌晨三点被报警电话惊醒——用户投诉页面数据不一致,我才真正理解了这个"银弹"技术背后的复杂性。读写分离看似是提升数… · 2026/11/4 16:41:28

SAP物料号编号范围配置全解析:从冲突排查到物料类型分派
SAP物料号编号范围配置全解析:从冲突排查到物料类型分派

简介:这份文档面向SAP实施顾问、后勤模块运维人员及物料主数据管理员,聚焦物料主数据编号范围的配置与维护,帮助解决物料编码格式定义、号码组划分及物料类型分派等实际问题,属于偏实操的中级配置资料。压缩包内共1个docx文件&… · 2026/11/4 16:40:27

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码