一、前端开发的演进之路
在前端开发的历史中,我们经历了多个阶段的演变:
- 初级阶段:前端切图崽(HTML + CSS + 简单 JS)
- 进阶阶段:前端工程师(掌握 Vue / React 等框架)
- 全栈阶段:Node.js + 数据库,实现前后端一体化
- 移动开发阶段:React Native 构建 Android/iOS 应用
- AI 阶段:AIGC 工具辅助开发,AI 赋能应用
- 终极目标:JS 全干工程师 ------ 前端、后端、移动端、AI 应用全能
随着技术的进步,开发者越来越需要关注业务本身,而非底层 API 的复杂操作。而 React 正是帮助我们实现这一目标的强大工具。
二、什么是 React?
React 是由 Facebook 开源的一个用于构建用户界面的 JavaScript 库。它以组件化为核心思想,允许我们将 UI 拆分为独立、可复用的部分。React 并不强制使用某种架构模式,但它非常适合与现代前端开发流程结合使用,如模块化、响应式数据、状态管理等。
三、项目创建全流程详解
1. npm 是什么?
npm(Node Package Manager)是 Node.js 自带的包管理器,用于安装和管理 JavaScript 包。它是前端生态的基础工具之一。
csharp
npm init vite
该命令会引导你使用 Vite 创建一个基于模板的新项目。Vite 是新一代前端构建工具,具备快速冷启动、即时热更新等优点。
2. 初始化 React 项目
在初始化过程中,你需要选择以下配置项:
- 项目名称
- 框架类型:React
- 是否使用 TypeScript:选择 JS(本文以 JS 为例)
执行完毕后,Vite 将为你生成一个标准的 React 项目结构。
3. 安装依赖 & 启动项目
进入项目目录并安装依赖:
bash
cd your-project-name
npm install
这一步会下载 node_modules
中所需的依赖包。
启动开发服务器:
arduino
npm run dev
默认情况下,项目将在 http://localhost:5173
运行。
四、React 初体验:组件驱动开发
1. 组件是开发的基本单元
React 的核心理念是组件化开发。每个组件都是一个函数或类,负责渲染页面的一部分。
javascript
function App() {
return (
<div>
<h1>这里是一个组件</h1>
</div>
);
}
组件可以组合使用,形成完整的页面结构。
2. JSX 语法简介
JSX 是一种类似 HTML 的语法扩展,可以直接在 JavaScript 中书写 HTML 标签,提高代码可读性和开发效率。
ini
const element = <h1>欢迎来到 React 世界</h1>;
3. 使用 JavaScript 表达式 { }
在 JSX 中,可以通过 {}
插入任意合法的 JavaScript 表达式:
ini
const name = "张三";
return <p>你好,{name}</p>;
无需手动调用 DOM API,React 会自动处理视图更新。
五、响应式数据与状态管理
1. 状态的概念
在 React 中,数据的状态决定了组件的行为和显示内容。当状态发生变化时,React 会自动更新对应的 UI。
2. 使用 useState 管理响应式数据
React 提供了 Hook 函数 useState
来定义响应式状态:
javascript
import React, { useState } from 'react';
function TodoApp() {
const [todos, setTodos] = useState(['吃饭', '睡觉', '学习']);
return (
<ul>
{todos.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
);
}
其中:
todos
是当前的状态值setTodos
是用来更新状态的方法
3. 动态更新状态
你可以通过事件绑定来修改状态,例如添加新任务:
javascript
function AddTodo({ onAdd }) {
const [text, setText] = useState('');
setTimeout(()=>{
setText=['添加了']
},3000)
return (
<div>
<h1>{text}</h1>
</div>
);
}
六、React 与实际业务场景结合:TODOS 应用示例
1. 业务需求分析
我们的目标是开发一个简单的 TODOS 应用,支持添加新任务、删除任务以及显示任务列表。这个应用将帮助我们理解 React 的核心概念,如状态管理、事件处理等。
2. 数据结构设计
为了简单起见,我们将使用一个字符串数组来存储待办事项:
ini
const initialTodos = ['吃饭', '睡觉', '学习'];
每个元素代表一个待办事项。随着用户交互(添加或删除),这个数组会动态变化。
3. 功能实现详解
完整代码
javascript
function TodoApp() {
const [todos, setTodos] = useState(['吃饭', '睡觉', '学习']);
const [inputValue, setInputValue] = useState('');
const addTodo = () => {
if (inputValue.trim()) {
setTodos([...todos, inputValue]);
setInputValue('');
}
};
const deleteTodo = (index) => {
const newTodos = todos.filter((_, i) => i !== index);
setTodos(newTodos);
};
return (
<div>
<h1>我的待办事项</h1>
<input
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
<button onClick={addTodo}>添加</button>
<ul>
{todos.map((todo, index) => (
<li key={index}>
{todo}
<button onClick={() => deleteTodo(index)}>删除</button>
</li>
))}
</ul>
</div>
);
}
详细解释
-
状态初始化
csharpconst [todos, setTodos] = useState(['吃饭', '睡觉', '学习']); const [inputValue, setInputValue] = useState('');
使用
useState
钩子初始化两个状态变量:todos
:用于存储当前的待办事项列表。inputValue
:用于存储输入框中的文本值。
-
添加新任务
iniconst addTodo = () => { if (inputValue.trim()) { setTodos([...todos, inputValue]); setInputValue(''); } };
当点击"添加"按钮时,
addTodo
函数会被调用。它首先检查输入框的内容是否为空白字符以外的内容。如果是,则将当前输入框的内容添加到todos
数组中,并清空输入框。 -
删除任务
iniconst deleteTodo = (index) => { const newTodos = todos.filter((_, i) => i !== index); setTodos(newTodos); };
当用户点击某个任务旁边的"删除"按钮时,
deleteTodo
函数会被调用。该函数通过filter
方法创建一个新的数组,排除掉指定索引的任务,并更新todos
状态。 -
渲染 UI
javascriptreturn ( <div> <h1>我的待办事项</h1> <input value={inputValue} onChange={(e) => setInputValue(e.target.value)} /> <button onClick={addTodo}>添加</button> <ul> {todos.map((todo, index) => ( <li key={index}> {todo} <button onClick={() => deleteTodo(index)}>删除</button> </li> ))} </ul> </div> );
这段 JSX 代码描述了整个应用的 UI 结构:
- 显示一个标题。
- 提供一个输入框,允许用户输入新的待办事项。
- 显示一个按钮,用于触发添加新任务的操作。
- 列表 (
<ul>
) 中的每一项 (<li>
) 对应一个待办事项,旁边有一个"删除"按钮,用于移除该项。
七、React 技术栈的优势
- 专注业务逻辑:远离底层 DOM 操作,专注于功能实现
- 组件化开发:高内聚、低耦合,易于维护和复用
- 响应式数据流:通过状态管理实现高效的数据驱动
- 跨平台能力:React 可用于 Web、React Native(移动端)、甚至桌面端(Electron)
八、总结:React 在现代开发中的定位
React 不仅是一个前端框架,更是一种开发思维方式的变革。它帮助我们构建响应式、可维护、可扩展的应用程序,从而让我们把精力集中在真正重要的事情上------业务逻辑与用户体验。