小白也能学会!React核心概念与实战指南(强烈推荐收藏)

React是声明式JavaScript库,其三大颠覆性理念为JSX(JavaScript表达UI)、数据驱动UI(props映射为UI)和Virtual DOM(同构渲染)。文章详解JSX语法规则、组件编写方法及调试技巧,通过Todo项目实践帮助开发者掌握React从零构建现代Web应用的核心技能。

一、React 是什么

在 React 之前前端有三个里程碑意义的 library/framework

  • jQuery 解决了浏览器兼容和 DOM 元素快捷操作问题,其链式操作 API 也对后续前端框架产生了深刻影响;
  • Knockout 提出了前端代码 MVVM 分层理念,数据通过模板映射为 UI 视图,大幅度减少了 DOM 操作;
  • AngularJS 在 MVVM 基础上引入了双向绑定,数据变化自动反映到 UI,视图上的操作也反向自动更新数据;其通过指令拓展 HTML 的风格提升了模板引擎的灵活性,可惜作者引入了大量借鉴服务器编程的概念,让 AugularJS 学习成本直线上升,性能也略有不足;

React 是一个声明式、高效、灵活的用于构建用户界面的 JavaScript library,React 核心理念在于将一些简短、独立的代码片段组合成复杂的 UI 界面,这些代码片段被称作 “Component”。React 不是 MVC 框架,更像是其中 V,仅仅负责用户交互视图的渲染。

React 带来了三个颠覆性理念,在接下来的章节中将一一介绍:

  • JSX,使用 JavaScript 表达 UI + 交互,充分利用 JavaScript 的灵活性;
  • fx(props) = UI,数据驱动 UI,单向数据流、函数风格的页面组件;
  • Virtual DOM,服务器、客户端使用同一套代码渲染——同构,解决前端应用 SEO 问题;

二、快速初始化 React 项目

使用 Create React App [1]可以快速初始化一个 React Web 项目。

$ npx create-react-app learn-react --template typescript $ cd learn-react $ npm start

执行 npm start后浏览器会在 http://localhost:3000 打开项目首页。

三、调试 React 应用

React 提供了 React Developer Tools[2],集成到了 Chrome Dev Tools,借此可以查看 React 组件树及其对应 Props、State。

app.tsx

import React, { useState } from 'react'; function Button(props: { count: number }): JSX.Element { const [count, setCount] = useState(props.count); return ( <button onClick={() => { setCount((c) => c + 1); }} > {count} </button> ); } function App() { const [count, setCount] = useState(0); return ( <div className="App"> <Button count={5} /> </div> ); } export default App;

index.tsx

import React from 'react'; import * as ReactDOMClient from 'react-dom/client'; import App from './app'; const rootElement = document.querySelector('body') as Element; const root = ReactDOMClient.createRoot(rootElement); root.render(<App />);

打开 Chrome Dev Tools 可以看到多了一个 Components选项卡

四、Todo project

接下来边学习边做一个 Todo 项目体验一下 React。

五、使用 JSX 做更好的关注点分离

在开始编写 React 程序之前需要了解一下 JSX。JSX 是 React 对 JavaScript 的语法拓展,用来在 JavaScript 文件内通过类HTML标签(HTML-like markup)表达页面的视图与交互逻辑。

<div className="container"> <CustomComponent onClick={() => {alert('Hello')}} > Hello {props.name}! </CustomComponent> </div>

Web 页面由 HTML 内容、CSS 样式、JavaScript 交互构成,长期以来 Web 开发者将三者放在独立的文件中做分离,这实际上是按照技术实现的分离。

传统页面内容主要由 HTML 定义,JavaScript 逻辑是点缀,随着现代网页交互性增强,页面内容很大程度是由 JavaScript 逻辑动态生成,同时渲染逻辑本质上与其他 UI 逻辑内在耦合,比如在 UI 中需要绑定处理事件、在某些时刻状态发生变化时需要通知到 UI,以及需要在 UI 中展示准备好的数据。

因此 React 使用 JSX 把渲染逻辑和 HTML 标签集成到一起。

这样开发者关注的不是 HTML 模板、JavaScript 渲染逻辑这样的技术实现,而是诸如 Sidebar、Form 这样的页面功能单元。

六、使用 JSX 编写 React 组件

返回 JSX 的函数就是 React 最简单的组件,可以和 HTML 标签一样嵌套使用。React 使用 props参数向组件传递数据,提升组件的复用性。

/** * JSX 语法隐式调用 React.createElement * 所以虽然代码中没有调用 React 的语句,仍然需要引入 */ import React from 'react'; interface IButton { /** 按钮展示文案 */ text: string; /** 点击按钮跳转链接 */ link?: string; /** 点击按钮自定义事件 */ onClick?: (event?: Event) => void } function Button(props: IButton) { const { text, link, onClick } = props; const redirectHandler = () => { location.href = link; }; return ( <div className="button" onClick={onClick | redirectHandler} > {text} </div> ); } export default Button;

在使用组件时候,通过其标签的属性组装成 props 对象,传递给组件,语法和 HTML attribute 类似,但值可以是任意的 JavaScript 对象。

import React from 'react'; /** * 导入 ./button.tsx 中 export 的默认内容,命名为 Button 使用 * .tsx 拓展名可以省略 */ import Button from './button'; interface IDialog { title: string; content: Element; showClose: boolean; } function Dialog(props: IDialog) { const { title, content, showClose = false, children } = props; const hideDialog = () => { // ... } return ( <div> <div className="dialog-title"> {title} </div> <div className="dialog-body"> {content | children} </div> {/* 没错,Button props 定义的属性,就是这样通过标签属性开放出来的 */} <Button title="取消" onClick={hideDialog} /> <Button title="确认" onClick={() => { }} /> </div> ); } export default Dialog;

组件写好后通过 react-dom [3]将组件渲染到页面。

import React from 'react'; import ReactDOM from 'react-dom/client'; import Dialog from './dialog'; // 把组件渲染到页面 id 为 root 的元素中 const rootElement = document.getElementById('root'); const root = ReactDOM.createRoot(rootElement); root.render( <Dialog title="demo dialog" content="this is a dialog" showClose={false} /> );

七、JSX 规则

React 组件有几个约定:

  • 组件名称使用 Pascal 风格(首字母大写),以和 HTML 原生标签(div、p、a 等)区分;
  • 组件仅接受 props一个参数,用来暴露组件可配置属性,其子组件被 React 通过 children属性注入;
  • 在组件内部 props 是只读的,不允许对其进行修改;

1. 必须有根节点

如同上面写的几个简单 demo,JSX 必须有 root 节点,即使多个同级元素没有父节点,也需要用虚拟节点 <></> 来包裹。

{/* 非法的 JSX */} <div id="box1"></div> <div id="box2"></div>
{/* 合法的 JSX */} <> <div id="box1"></div> <div id="box2"></div> </>

2. 所有标签需要闭合

在 HTML 中标签并不一定需要闭合。

<meta charset="UTF-8"> <br> <img src="https://g.alicdn.com/logo.png">

在 JSX 中可以混合 HTML 原生标签,但所有标签必须闭合。

<> <meta charset="UTF-8" /> <br/> <img src="https://g.alicdn.com/logo.png"/> </>

3. 和 HTML 属性差异

  • 在 React 中常用的 DOM 特性和属性(包括事件处理)都使用小驼峰命名的方式,例如与 HTML 中的 tabindex 属性对应的 React 的属性是 tabIndex;

  • HTML 部分属性名称与 JavaScript 保留字冲突,在 JSX 中需要使用替代名称;

  • style 属性 value 是一个 CSS 属性组成的对象,为了让其符合 JavaScript 语法规则,属性名使用驼峰命名(fontSize、backgroundColor),而不是 CSS 属性使用的连字符,这样可以很方便设置动态样式,但静态样式应该依赖 className 和 CSS 文件的配合;

function HelloWorldComponent(props) { const divStyle = { // 可以很方便设置动态样式 backgroundImage: 'url(' + props.imgUrl + ')', // 但静态样式应该尽量通过 className 设置类,通过 css file 解决 // 不推荐 color: 'blue' 这种静态样式直接在 JSX 的写法 color: 'blue', }; return ( <div style={divStyle}> Hello World! </div> ); }
  • React 对于 Form 表单支持 defaultValue 属性,设置默认值,在运行时取值使用和 HTML 一致的 value属性。

4. 自动转义 content

为了防止 XSS 攻击,JSX 会对直接设置的文本进行转义。

const content = ` 这里应该展示一张图片<br> <img src="https://sc02.alicdn.com/kf/HTB1gUuPUkzoK1RjSZFl761i4VXaw.png" /> `; <div> {content} </div>

页面效果:

在安全性有保障的时候,可以通过 dangerouslySetInnerHTML禁用转义效果,展示 raw HTML

const content = ` 这里应该展示一张图片<br> <img src="https://sc02.alicdn.com/kf/HTB1gUuPUkzoK1RjSZFl761i4VXaw.png" /> `; <div dangerouslySetInnerHTML={{ __html: content }}/>

八、在 JSX 中TODO使用 {} 支持 JavaScript 表达式

JSX 中使用 {} 包裹 JavaScript 表达式处理动态逻辑,属性 value、子元素都可以,最常见的几个用法:

  • {变量名}读取变量值,双层 {{}} 并不是特殊语法,而是 {对象} 的快捷写法
<div style={{ color: 'red' }}></div> // 等同于 const styleObj = { color: 'red' }; <div style={styleObj}></div>
  • 三元表达式处理 if-else(if-else 是语句,不是表达式)
  • map 处理循环逻辑,批量生成元素
interface IStuff { name: string; sex: 'male' | 'female'; } function App () { const list: Array<IStuff> = [ { name: 'Byron', sex: 'male' }, { name: 'Casper', sex: 'male' }, { name: 'Junice', sex: 'female' }, ]; return ( <ul className="stuff-list"> { list.map(stuff => { // 生成多个 const { name, sex } = stuff; return ( { <li /* 实际编程 className 设置有更好的表达方式,这里仅 demo 三元表达式使用 */} className={sex === 'male' ? 'stuff-male' : 'stuff-female'} onClick={() => { alert(name) }} > // 读取变量值 {name} </li> ); }) } </ul> ); }

JSX 中注释也需要使用 {} 包裹,但这种写法过于不方便,大部分编译工具都可以处理双斜线风格//注释

九、JSX 的背后

JSX 的返回值既不是 DOM 元素,也不是 HTML 字符串,而是对 DOM 的一个 JSON 描述,这就是 React Element:

<button id="9527" className="btn-primary"> <span style={{ color: 'red' }}> This is a Button </span> </button>

JSX 用类似这样的结构表达:

{ "type": "button", "props": { "id": "9527", "className": "btn-primary", "children": [ { "type": "span", "props": { "style": { "color": "red" }, "children": "This is a Button" } } ] } }

编译后实际是这样的调用:

React.createElement("button", { id: "9527", className: "btn-primary" },React.createElement("span", { style: { color: 'red' } }, "This is a Button"));

React.createElement(type, props, …children),上文提到过 React 会自动把 children 注入到 props,就是在这个过程。

了解了 JSX 之后可以开始编写静态的 React Component 了。

完整教程见语雀:https://www.yuque.com/sunluyong/fe4java/pwsehvspthh6gtrd

那么,如何系统的去学习大模型LLM?

作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。

所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。

由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

👉大模型学习指南+路线汇总👈

我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。

👉①.基础篇👈

基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。

👉②.进阶篇👈

接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。

👉③.实战篇👈

实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。

👉④.福利篇👈

最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!

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

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

相关文章

国内高校导师力荐的本科生毕业论文选题平台Top10

10大论文选题工具核心对比 排名 工具名称 核心功能 效率评分 适用场景 1 aicheck 智能选题大纲生成 ★★★★★ 完全无头绪时的选题生成 2 aibiye 选题优化可行性分析 ★★★★☆ 已有初步方向的优化调整 3 知网 学术资源库选题参考 ★★★★☆ 专业领域深度…

【必收藏】热乎大模型应用面经(已拿offer,小白/程序员速码)

今天给大家分享一份新鲜出炉的大模型应用开发面经&#xff0c;涵盖近半年面试实战、核心考点、拿offer技巧&#xff0c;尤其适合想入门大模型、冲击秋招的程序员小白&#xff0c;建议收藏慢慢消化&#xff0c;助力大家少走弯路、顺利上岸&#xff01;一、面试基础信息 1. 时间跨…

如何把一个js的代码变成一个.min.js的文件

首先,安装Terser:npm install terser -g 然后,将你的script.js压缩成script.min.js:执行这行代码 terser index.js --compress --mangle --output index.min.js

手把手教你用css vh打造动态Grid结构

用 CSS vh 打造真正自适应的 Grid 布局&#xff1a;从原理到实战 你有没有遇到过这样的场景&#xff1f; 在手机上打开一个网页&#xff0c;页面底部被浏览器地址栏“吃掉”了一截&#xff1b; 桌面端仪表盘中间留着大片空白&#xff0c;而移动端内容却溢出滚动&#xff1…

国产替代MABA-009852-CF1A40

国产替代MABA-009852-CF1A40国产替代MABA-009852-CF1A40 成都恒利泰H3-MABA-009852-CF1A40 频率范围5-300MHz,SMT,阻抗75Ω,阻抗比1:1,巴伦变压器 恒利泰,射频无源器件专家

涵盖各学科领域的毕业论文选题平台十佳排行榜

10大论文选题工具核心对比 排名 工具名称 核心功能 效率评分 适用场景 1 aicheck 智能选题大纲生成 ★★★★★ 完全无头绪时的选题生成 2 aibiye 选题优化可行性分析 ★★★★☆ 已有初步方向的优化调整 3 知网 学术资源库选题参考 ★★★★☆ 专业领域深度…

2026年热门的无尘坦克链,静音坦克链,坦克链厂家优质推荐 - 品牌鉴赏师

引言在2026年的工业设备领域,无尘坦克链和静音坦克链凭借其卓越的性能优势,成为了众多企业提升生产效率和设备稳定性的关键选择。为了帮助广大用户在众多坦克链厂家中挑选到优质的产品和服务,我们依据一系列科学、严…

忻州市五寨岢岚河曲保德偏关英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在雅思培训领域,忻州市五寨、岢岚、河曲、保德、偏关等县域考生常面临优质教育资源匮乏、选课迷茫、提分无门的困境。如何在众多机构中筛选出靠谱且实用的雅思培训方案,直接关系到考试成败与留学规划的推进。基于202…

html2canvas #x2B; jspdf实现页面导出成pdf

封装一个好用的页面导出 PDF 工具 Hook (html2canvas jspdf) 在最近的一个项目中&#xff0c;遇到一个将页面内容&#xff08;详情页&#xff09;导出为 PDF的需求,但是好像目前没有直接把dom转成pdf这样一步到位的技术&#xff0c;所以自己封装了一个间接转换的方法&#xff…

轻量级VLM也能SOTA?PaddleOCR-VL-WEB技术深度解析

轻量级VLM也能SOTA&#xff1f;PaddleOCR-VL-WEB技术深度解析 1. 引言&#xff1a;文档解析的效率与精度之争 在当前AI大模型快速发展的背景下&#xff0c;视觉-语言模型&#xff08;Vision-Language Model, VLM&#xff09;已成为复杂文档解析的核心技术。然而&#xff0c;大…

APISIX > AI 网关实现 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Qwen3-VL-2B行业应用:安防监控的异常行为检测

Qwen3-VL-2B行业应用&#xff1a;安防监控的异常行为检测 1. 引言&#xff1a;AI视觉理解在安防场景中的演进 随着城市化进程加快和公共安全需求提升&#xff0c;传统安防系统正从“被动录像”向“主动识别”转型。早期的视频监控依赖人工回看&#xff0c;效率低、响应慢&…

超实用技巧!快速掌握 Qwen2.5-7B 指令微调方法

超实用技巧&#xff01;快速掌握 Qwen2.5-7B 指令微调方法 1. 环境与资源概览 在进行大模型指令微调之前&#xff0c;确保具备合适的硬件和软件环境是成功的关键。本文基于预置镜像 单卡十分钟完成 Qwen2.5-7B 首次微调&#xff0c;提供一套高效、可复现的 LoRA 微调实践方案…

朔州市山阴应县右玉英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在全球化留学趋势持续升温的背景下,雅思考试已成为朔州市、山阴县、应县、右玉县学子通往海外名校的核心门槛。然而,当地雅思培训市场鱼龙混杂,考生普遍面临选课迷茫、优质资源匮乏、提分效率低下、个性化方案缺失等…

mysql 语句优化

# MySQL 语句优化方式详解 ## 📊 **一、SQL 编写优化** ### **1. 避免 SELECT ***```sql-- ❌ 不推荐SELECT * FROM users WHERE status = 1; -- ✅ 推荐:只取需要的列SELECT id, name, email FROM users WHERE sta…

Qwen2.5 API调用实战:Python集成与响应解析指南

Qwen2.5 API调用实战&#xff1a;Python集成与响应解析指南 1. 引言 1.1 业务场景描述 在当前大模型应用快速发展的背景下&#xff0c;如何高效地将大型语言模型&#xff08;LLM&#xff09;集成到实际产品中成为关键挑战。本文聚焦于 Qwen2.5-7B-Instruct 模型的本地部署与…

忻州市忻府原平定襄五台英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在雅思培训市场鱼龙混杂的当下,忻州市忻府、原平、定襄、五台等地的考生普遍面临选课迷茫、优质机构难甄别、提分技巧匮乏、个性化方案缺失等痛点。如何在众多教育机构中选出靠谱且性价比高的品牌,直接关系到考试成败…

实战案例解析CANFD如何突破CAN的速率瓶颈

实战解析&#xff1a;CAN FD如何破解传统CAN的带宽困局你有没有遇到过这样的场景&#xff1f;在调试一辆智能电动车的BMS系统时&#xff0c;发现电池数据上传延迟严重&#xff1b;或者在做ADAS融合感知时&#xff0c;摄像头目标框频繁丢帧——而排查下来&#xff0c;并非算法或…

Qwen3-4B模型安全:内容过滤与敏感词处理

Qwen3-4B模型安全&#xff1a;内容过滤与敏感词处理 1. 引言 1.1 AI 写作大师 - Qwen3-4B-Instruct 随着大语言模型在内容生成、代码编写和逻辑推理等领域的广泛应用&#xff0c;如何确保其输出的安全性成为工程落地中的关键挑战。基于阿里云最新发布的 Qwen/Qwen3-4B-Instr…

IsoAlgo管道轴测图引擎用户界面

为了方便用户使用IsoAlgo,提供一个简单的用户界面IsoAlgo简介 IsoAlgo是图核科技公司自主研发的管道轴测图引擎piping Isometric drawing generation Algorithms的简称,读作ISO阿狗或爱狗。IsoAlgo可以通过读取IDF/P…