Appearance
React简介与特点
第一章:React概述
1.1 React是什么
React是一个用于构建用户界面的JavaScript库,由Facebook(现Meta)于2013年开源。它专注于视图层(UI层),采用组件化的开发模式,让开发者能够构建大型、复杂的Web应用。
React的定位
React不是一个完整的框架,而是一个专注于UI的库:
完整框架(如Angular):
UI层 + 路由 + 状态管理 + HTTP客户端 + 表单验证 + ...
React:
UI层(核心)+ 生态系统(可选)这种设计哲学让React具有极大的灵活性,开发者可以根据需求选择其他工具:
- 路由:React Router、TanStack Router
- 状态管理:Redux、Zustand、Jotai
- 数据获取:TanStack Query、SWR
- 表单:React Hook Form、Formik
React的核心理念
React的设计基于几个核心理念:
- 声明式UI
javascript
// 命令式(传统DOM操作)
const button = document.createElement('button');
button.textContent = 'Click me';
button.onclick = function() {
alert('Clicked!');
};
document.body.appendChild(button);
// 声明式(React)
function Button() {
return (
<button onClick={() => alert('Clicked!')}>
Click me
</button>
);
}声明式编程的优势:
- 代码更易读懂
- 更容易推理应用状态
- 减少bug产生
- 更好的开发体验
- 组件化
javascript
// 将UI拆分为独立的组件
function App() {
return (
<div>
<Header />
<Sidebar />
<MainContent />
<Footer />
</div>
);
}
function Header() {
return (
<header>
<Logo />
<Navigation />
<UserMenu />
</header>
);
}组件化的好处:
- 代码复用
- 关注点分离
- 易于维护
- 团队协作
- 单向数据流
javascript
// 数据从父组件流向子组件
function Parent() {
const [data, setData] = useState("Hello");
return <Child message={data} />;
}
function Child({ message }) {
return <div>{message}</div>;
}
// 子组件通过回调通知父组件
function Parent() {
const [count, setCount] = useState(0);
return <Child onIncrement={() => setCount(count + 1)} />;
}
function Child({ onIncrement }) {
return <button onClick={onIncrement}>Increment</button>;
}单向数据流的优势:
- 数据流向清晰
- 易于调试
- 可预测性强
- 避免数据混乱
- 虚拟DOM
真实DOM更新流程:
JavaScript修改数据
→ 直接操作DOM
→ 浏览器重排重绘
→ 性能消耗大
虚拟DOM流程:
JavaScript修改数据
→ 更新虚拟DOM
→ Diff算法找出差异
→ 批量更新真实DOM
→ 性能优化1.2 React的历史与发展
创建背景
2011年,Facebook的News Feed功能变得越来越复杂,传统的MVC架构难以维护。工程师Jordan Walke创建了FaxJS(React的前身),引入了组件化和虚拟DOM的概念。
重要版本历史
React 0.x(2013年)
- 首次开源发布
- 引入JSX语法
- 组件化开发模式
- 虚拟DOM机制
React 0.14(2015年)
- 拆分react和react-dom
- 引入无状态函数组件
- 引入ref API
React 15(2016年)
- 改进SVG支持
- 优化服务端渲染
- 移除部分已废弃的API
React 16(2017年)
- Fiber架构重写核心
- 错误边界(Error Boundaries)
- Portals
- Fragment
- 改进的服务端渲染
React 16.3(2018年)
- 新的Context API
- 新的生命周期方法
- StrictMode
React 16.8(2019年)
- Hooks发布(革命性更新)
- useState、useEffect等基础Hooks
- 函数组件成为主流
React 17(2020年)
- 无新特性版本
- 新的JSX Transform
- 事件委托改进
- 支持渐进式升级
React 18(2022年)
- Concurrent Rendering
- Automatic Batching
- useTransition、useDeferredValue
- Suspense改进
- Streaming SSR
React 19(2024年)
- use() Hook
- Server Components稳定版
- Server Actions
- useActionState、useOptimistic
- React Compiler
- Document Metadata API
- ref as prop
1.3 React的核心特点
特点1:声明式编程
React使用声明式方式描述UI,让代码更可预测、更容易调试。
传统命令式编程:
javascript
// 命令式:告诉计算机如何做
const container = document.getElementById('root');
const header = document.createElement('h1');
header.textContent = 'Hello World';
container.appendChild(header);
const list = document.createElement('ul');
const items = ['Apple', 'Banana', 'Orange'];
items.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
list.appendChild(li);
});
container.appendChild(list);React声明式编程:
javascript
// 声明式:描述想要什么
function App() {
const items = ['Apple', 'Banana', 'Orange'];
return (
<div>
<h1>Hello World</h1>
<ul>
{items.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</div>
);
}声明式的优势:
- 代码更简洁:减少70%的代码量
- 更易理解:一眼看出UI结构
- 更少bug:无需手动维护DOM状态
- 更好的抽象:隐藏了DOM操作细节
特点2:组件化
组件是React的核心概念,将UI拆分为独立、可复用的部分。
组件的特点:
javascript
// 1. 独立性:每个组件都是独立的单元
function Button({ children, onClick }) {
return <button onClick={onClick}>{children}</button>;
}
// 2. 可复用:组件可以在多处使用
function App() {
return (
<div>
<Button onClick={() => alert('1')}>Button 1</Button>
<Button onClick={() => alert('2')}>Button 2</Button>
<Button onClick={() => alert('3')}>Button 3</Button>
</div>
);
}
// 3. 可组合:小组件组成大组件
function UserCard({ user }) {
return (
<div className="card">
<Avatar src={user.avatar} />
<UserInfo name={user.name} email={user.email} />
<ActionButtons userId={user.id} />
</div>
);
}
// 4. 封装性:内部实现细节隐藏
function SearchBar() {
const [query, setQuery] = useState('');
const [results, setResults] = useState([]);
// 内部状态和逻辑
const handleSearch = async () => {
const data = await searchAPI(query);
setResults(data);
};
// 对外只暴露UI
return (
<div>
<input value={query} onChange={e => setQuery(e.target.value)} />
<button onClick={handleSearch}>Search</button>
<ResultsList results={results} />
</div>
);
}组件的类型:
- 函数组件(推荐)
javascript
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
// 或使用箭头函数
const Welcome = ({ name }) => {
return <h1>Hello, {name}</h1>;
};- 类组件(遗留)
javascript
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}在React 19中,函数组件是绝对主流,类组件主要用于维护旧代码。
特点3:虚拟DOM
虚拟DOM是React性能优化的核心机制。
虚拟DOM的工作原理:
1. 创建虚拟DOM树
JavaScript对象表示DOM结构
2. 数据变化时创建新的虚拟DOM树
3. Diff算法比较新旧虚拟DOM
找出最小变更集
4. 批量更新真实DOM
只更新必要的部分代码示例:
javascript
// 虚拟DOM的简化表示
const vdom = {
type: 'div',
props: {
className: 'container',
children: [
{
type: 'h1',
props: {
children: 'Hello World'
}
},
{
type: 'p',
props: {
children: 'This is a paragraph'
}
}
]
}
};
// React的JSX会被转换为类似结构
<div className="container">
<h1>Hello World</h1>
<p>This is a paragraph</p>
</div>
// 转换后(简化版)
React.createElement(
'div',
{ className: 'container' },
React.createElement('h1', null, 'Hello World'),
React.createElement('p', null, 'This is a paragraph')
);性能对比:
javascript
// 场景:更新1000个列表项中的1个
// 传统DOM操作
for (let i = 0; i < 1000; i++) {
document.querySelectorAll('li')[i].textContent = items[i];
}
// 性能:1000次DOM操作
// React虚拟DOM
setItems(newItems);
// 性能:Diff算法识别出只有1个变化,只进行1次DOM操作Diff算法优化策略:
- 同层比较
只比较同一层级的节点,不跨层比较
时间复杂度:O(n) 而不是 O(n³)- 类型比较
不同类型的元素会产生不同的树
直接替换而不是修改- key的作用
javascript
// 没有key:React无法识别具体是哪个元素
<ul>
{items.map(item => <li>{item}</li>)}
</ul>
// 有key:React可以精确追踪每个元素
<ul>
{items.map(item => <li key={item.id}>{item.name}</li>)}
</ul>特点4:单向数据流
React采用单向数据流(Unidirectional Data Flow),数据从父组件流向子组件。
数据流示意:
javascript
// 父组件
function Parent() {
const [message, setMessage] = useState("Hello");
return (
<div>
<Child message={message} />
<button onClick={() => setMessage("Hi")}>Change</button>
</div>
);
}
// 子组件只能读取props
function Child({ message }) {
// 不能直接修改props
// message = "Changed"; // 错误!
return <div>{message}</div>;
}
// 子组件通过回调通知父组件
function Parent() {
const [count, setCount] = useState(0);
return <Child count={count} onIncrement={() => setCount(count + 1)} />;
}
function Child({ count, onIncrement }) {
return (
<div>
<p>Count: {count}</p>
<button onClick={onIncrement}>+1</button>
</div>
);
}单向数据流的优点:
可预测性
- 数据流向明确
- 容易追踪数据变化
- 调试更容易
可维护性
- 组件职责清晰
- 修改影响范围可控
- 重构更安全
可测试性
- 组件输入输出明确
- 纯函数易于测试
- 模拟数据简单
1.4 React与其他框架对比
React vs Vue
javascript
// React实现
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>{count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
}
// Vue实现
<template>
<div>
<p>{{ count }}</p>
<button @click="count++">+1</button>
</div>
</template>
<script>
export default {
data() {
return {
count: 0
}
}
}
</script>对比分析:
学习曲线:
Vue: ⭐⭐⭐⭐⭐ (更平缓)
React:⭐⭐⭐⭐ (需要理解JavaScript)
灵活性:
Vue: ⭐⭐⭐⭐ (渐进式框架)
React:⭐⭐⭐⭐⭐ (高度灵活)
生态系统:
Vue: ⭐⭐⭐⭐ (完善)
React:⭐⭐⭐⭐⭐ (最丰富)
性能:
Vue: ⭐⭐⭐⭐⭐ (响应式系统优化)
React:⭐⭐⭐⭐ (虚拟DOM优化)
TypeScript支持:
Vue: ⭐⭐⭐⭐ (Vue 3改进)
React:⭐⭐⭐⭐⭐ (原生友好)
移动端:
Vue: ⭐⭐⭐ (Weex)
React:⭐⭐⭐⭐⭐ (React Native)React vs Angular
typescript
// React实现
function TodoList() {
const [todos, setTodos] = useState([]);
const addTodo = (text) => {
setTodos([...todos, { id: Date.now(), text }]);
};
return (
<div>
{todos.map(todo => (
<div key={todo.id}>{todo.text}</div>
))}
</div>
);
}
// Angular实现
@Component({
selector: 'todo-list',
template: `
<div>
<div *ngFor="let todo of todos">{{todo.text}}</div>
</div>
`
})
export class TodoListComponent {
todos: Todo[] = [];
addTodo(text: string) {
this.todos.push({ id: Date.now(), text });
}
}对比分析:
架构:
Angular:完整的MVC框架
React: UI库 + 生态系统
学习曲线:
Angular:陡峭(需学习RxJS、依赖注入等)
React: 相对平缓(主要是JavaScript)
灵活性:
Angular:约定大于配置
React: 高度灵活
包体积:
Angular:较大(约500KB)
React: 较小(约140KB)
适用场景:
Angular:大型企业应用
React: 各种规模的应用React vs Svelte
javascript
// React实现
function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Count: {count}
</button>
);
}
// Svelte实现
<script>
let count = 0;
</script>
<button on:click={() => count += 1}>
Count: {count}
</button>对比分析:
编译方式:
Svelte:编译时优化,无运行时
React: 运行时库
包体积:
Svelte:极小(10-20KB)
React: 中等(140KB)
性能:
Svelte:编译后性能极佳
React: 虚拟DOM有小开销
生态系统:
Svelte:较新,生态在成长
React: 最成熟,生态最丰富
学习曲线:
Svelte:简单直观
React: 需要JavaScript基础第二章:React的设计哲学
2.1 组合优于继承
React推荐使用组合而不是继承来复用组件逻辑。
组合示例
javascript
// 使用组合构建复杂组件
function Dialog({ title, children, footer }) {
return (
<div className="dialog">
<div className="dialog-title">{title}</div>
<div className="dialog-content">{children}</div>
<div className="dialog-footer">{footer}</div>
</div>
);
}
// 使用
function WelcomeDialog() {
return (
<Dialog
title="Welcome"
footer={<button>Close</button>}
>
<p>Thank you for visiting!</p>
</Dialog>
);
}
// 特殊化组件
function ConfirmDialog({ message, onConfirm, onCancel }) {
return (
<Dialog
title="Confirm"
footer={
<>
<button onClick={onConfirm}>Yes</button>
<button onClick={onCancel}>No</button>
</>
}
>
<p>{message}</p>
</Dialog>
);
}为什么不用继承
javascript
// React不推荐使用继承
// 不推荐:基类组件
class BaseComponent extends React.Component {
constructor(props) {
super(props);
this.state = { loading: false };
}
setLoading(loading) {
this.setState({ loading });
}
}
class UserList extends BaseComponent {
// 继承BaseComponent
render() {
return this.state.loading ? <Spinner /> : <Users />;
}
}
// 推荐:使用Hooks和组合
function useLoading() {
const [loading, setLoading] = useState(false);
return [loading, setLoading];
}
function UserList() {
const [loading, setLoading] = useLoading();
return loading ? <Spinner /> : <Users />;
}2.2 关注点分离
React的关注点分离不是按技术分离(HTML/CSS/JS),而是按功能分离。
javascript
// 传统方式:按技术分离
// user.html
<div id="user-profile"></div>
// user.css
#user-profile {
padding: 20px;
}
// user.js
document.getElementById('user-profile').innerHTML = userData;
// React方式:按功能分离
// UserProfile.jsx(功能单元)
function UserProfile({ user }) {
const styles = {
padding: '20px'
};
return (
<div style={styles}>
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
);
}优势:
- 组件内聚合度高
- 易于复用
- 修改影响范围小
- 删除组件时相关代码一起删除
2.3 Learn Once, Write Anywhere
React的理念是"学一次,到处写",而不是"写一次,到处运行"。
javascript
// React核心概念在所有平台通用
function Counter() {
const [count, setCount] = useState(0);
return (
<view>
<text>{count}</text>
<button onClick={() => setCount(count + 1)}>+1</button>
</view>
);
}
// Web平台:使用react-dom
import { createRoot } from 'react-dom/client';
createRoot(document.getElementById('root')).render(<Counter />);
// 移动平台:使用react-native
import { AppRegistry } from 'react-native';
AppRegistry.registerComponent('Counter', () => Counter);
// VR平台:使用react-360
import { AppRegistry } from 'react-360';
AppRegistry.registerComponent('Counter', () => Counter);第三章:React的技术优势
3.1 开发效率
热模块替换(HMR)
javascript
// 开发时修改代码,页面自动更新,状态保持
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
}
// 修改按钮文字后,count状态保持不变强大的开发工具
- React DevTools
查看组件树
检查Props和State
追踪组件更新
性能分析- 错误提示
javascript
// React提供友好的错误信息
function App() {
const [user, setUser] = useState(null);
return <div>{user.name}</div>;
}
// 运行时错误:
// Cannot read property 'name' of null
// 在 App 组件- 严格模式
javascript
// 帮助发现潜在问题
import React from 'react';
import ReactDOM from 'react-dom/client';
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<App />
</React.StrictMode>
);3.2 性能优势
React 19的性能改进
- 自动批处理
javascript
// React 19自动批处理所有更新
function handleClick() {
setCount(count + 1); // 不会立即重渲染
setFlag(!flag); // 不会立即重渲染
setData(newData); // 批处理后只重渲染一次
}
// 即使在异步中也会批处理
setTimeout(() => {
setCount(count + 1);
setFlag(!flag);
// React 19会批处理这些更新
}, 1000);- React Compiler
javascript
// 以前需要手动优化
const MemoizedComponent = React.memo(Component);
const memoizedValue = useMemo(() => compute(a, b), [a, b]);
const memoizedCallback = useCallback(() => { doSomething(); }, []);
// React 19 Compiler自动优化
function Component({ a, b }) {
const value = compute(a, b); // 自动memoization
const callback = () => { // 自动memoization
doSomething();
};
return <div>{value}</div>;
}- Server Components
javascript
// 服务器组件:不发送JavaScript到客户端
async function ProductList() {
const products = await db.query('SELECT * FROM products');
return (
<div>
{products.map(product => (
<ProductCard key={product.id} product={product} />
))}
</div>
);
}
// 性能提升:
// - JavaScript包体积减少
// - 首屏加载更快
// - SEO更好3.3 可维护性
类型安全
typescript
// TypeScript与React完美集成
interface UserProps {
name: string;
age: number;
email?: string;
}
const UserProfile: React.FC<UserProps> = ({ name, age, email }) => {
return (
<div>
<h2>{name}</h2>
<p>{age} years old</p>
{email && <p>{email}</p>}
</div>
);
};
// 使用时类型检查
<UserProfile name="Alice" age={25} /> // OK
<UserProfile name="Alice" age="25" /> // 类型错误测试友好
javascript
// React组件易于测试
import { render, screen, fireEvent } from '@testing-library/react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
}
// 测试
test('Counter increments', () => {
render(<Counter />);
const button = screen.getByText('+1');
fireEvent.click(button);
expect(screen.getByText('Count: 1')).toBeInTheDocument();
});3.4 生态系统优势
丰富的库和工具
路由:
- React Router(100万+周下载)
- TanStack Router
状态管理:
- Redux(300万+周下载)
- Zustand(200万+周下载)
- Jotai、Recoil
UI组件库:
- Material-UI(400万+周下载)
- Ant Design(150万+周下载)
- Chakra UI、shadcn/ui
数据获取:
- TanStack Query(200万+周下载)
- SWR(50万+周下载)
- Apollo Client
表单:
- React Hook Form(300万+周下载)
- Formik
动画:
- Framer Motion(80万+周下载)
- React Spring
测试:
- Jest
- React Testing Library
- Cypress、Playwright全栈框架
javascript
// Next.js - 最流行的React全栈框架
// app/page.js
async function HomePage() {
const data = await fetch('https://api.example.com/data');
return <div>{data.title}</div>;
}
// Remix - 现代全栈框架
export async function loader() {
return json({ data: await getData() });
}
export default function Route() {
const { data } = useLoaderData();
return <div>{data}</div>;
}第四章:React的应用场景
4.1 单页应用(SPA)
javascript
// 典型的React SPA结构
import { BrowserRouter, Routes, Route } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<Layout>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/products" element={<Products />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</Layout>
</BrowserRouter>
);
}适用场景:
- 后台管理系统
- 数据可视化平台
- 社交媒体应用
- 在线工具
4.2 服务端渲染(SSR)
javascript
// Next.js服务端渲染
export async function getServerSideProps() {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return {
props: { data }
};
}
export default function Page({ data }) {
return <div>{data.title}</div>;
}适用场景:
- 电商网站(SEO需求)
- 新闻媒体网站
- 博客平台
- 营销页面
4.3 静态站点生成(SSG)
javascript
// Next.js静态生成
export async function getStaticProps() {
const posts = await getPosts();
return {
props: { posts },
revalidate: 60 // ISR:每60秒重新生成
};
}
export default function Blog({ posts }) {
return (
<div>
{posts.map(post => (
<article key={post.id}>
<h2>{post.title}</h2>
<p>{post.excerpt}</p>
</article>
))}
</div>
);
}适用场景:
- 个人博客
- 文档网站
- 企业官网
- 营销落地页
4.4 移动应用
javascript
// React Native
import { View, Text, Button } from 'react-native';
function App() {
const [count, setCount] = useState(0);
return (
<View>
<Text>Count: {count}</Text>
<Button
title="Increment"
onPress={() => setCount(count + 1)}
/>
</View>
);
}适用场景:
- iOS应用
- Android应用
- 跨平台移动应用
4.5 桌面应用
javascript
// Electron + React
function App() {
const handleOpen = () => {
window.electronAPI.openFile();
};
return (
<div>
<button onClick={handleOpen}>Open File</button>
</div>
);
}适用场景:
- VS Code扩展
- Slack、Discord等应用
- 生产力工具
- 跨平台桌面软件
第五章:React的学习路径
5.1 前置知识要求
必备知识
- HTML/CSS基础
html
<!-- HTML5语义化标签 -->
<header>
<nav>
<ul>
<li><a href="/">Home</a></li>
</ul>
</nav>
</header>
<main>
<section>
<article>Content</article>
</section>
</main>
<footer>
<p>Copyright 2024</p>
</footer>css
/* CSS3基础 */
.container {
display: flex;
justify-content: center;
align-items: center;
}
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}- JavaScript ES6+
javascript
// 必须掌握的JavaScript特性
const arrow = () => {};
const { name } = user;
const [...rest] = array;
const obj = { ...other };
async function fetch() {}
import { Component } from 'react';- DOM基础
javascript
// 理解DOM操作(即使React帮你做了)
document.querySelector('.btn');
element.addEventListener('click', handler);
element.classList.add('active');推荐知识
- TypeScript
- 构建工具基础(Webpack、Vite)
- Git版本控制
- 命令行基础
5.2 学习阶段规划
第一阶段:基础入门(1-2周)
目标:理解React核心概念
学习内容:
1. JSX语法
2. 组件概念
3. Props传递
4. State状态
5. 事件处理
6. 条件渲染
7. 列表渲染
实践项目:
- 计数器
- Todo List
- 简单表单第二阶段:Hooks掌握(2-3周)
目标:熟练使用Hooks
学习内容:
1. useState
2. useEffect
3. useContext
4. useReducer
5. useMemo、useCallback
6. useRef
7. 自定义Hooks
实践项目:
- 带过滤的Todo List
- 天气应用
- 简单博客第三阶段:生态系统(3-4周)
目标:掌握常用库
学习内容:
1. React Router
2. 状态管理(Redux/Zustand)
3. 数据获取(TanStack Query/SWR)
4. 表单处理(React Hook Form)
5. UI库(Ant Design/Material-UI)
实践项目:
- 多页面应用
- 数据Dashboard
- 电商前台第四阶段:React 19新特性(2-3周)
目标:掌握最新特性
学习内容:
1. use() Hook
2. Server Components
3. Server Actions
4. useActionState
5. useOptimistic
6. React Compiler
实践项目:
- 使用Server Components的博客
- 表单处理应用第五阶段:性能优化(2周)
目标:优化应用性能
学习内容:
1. React.memo
2. 代码分割
3. 懒加载
4. 虚拟列表
5. 性能分析工具
实践项目:
- 性能优化实战第六阶段:全栈开发(4周)
目标:构建全栈应用
学习内容:
1. Next.js框架
2. SSR/SSG
3. API Routes
4. 数据库集成
5. 认证授权
6. 部署上线
实践项目:
- 全栈博客系统
- 电商管理后台5.3 学习资源推荐
官方资源
1. React官方文档
https://react.dev
- 最权威的学习资料
- 包含互动教程
- 定期更新
2. React官方博客
https://react.dev/blog
- 版本发布说明
- 新特性介绍
- 最佳实践
3. React GitHub
https://github.com/facebook/react
- 源码学习
- Issue讨论
- RFC提案视频教程
英文资源:
- freeCodeCamp
- Traversy Media
- Web Dev Simplified
- Jack Herrington
中文资源:
- 峰华前端工程师
- 技术胖
- coderwhy在线平台
1. CodeSandbox
https://codesandbox.io
- 在线编写React
- 无需本地环境
2. StackBlitz
https://stackblitz.com
- WebContainer技术
- 完整开发环境
3. React官方playground
https://react.dev/learn总结
本章全面介绍了React的简介与特点:
- React是什么:专注UI的JavaScript库
- 核心理念:声明式、组件化、单向数据流
- 发展历史:从2013到2024的演进
- 核心特点:虚拟DOM、JSX、Hooks
- 框架对比:React vs Vue vs Angular vs Svelte
- 设计哲学:组合优于继承、关注点分离
- 技术优势:开发效率、性能、可维护性
- 应用场景:SPA、SSR、SSG、移动端、桌面
- 学习路径:6个阶段的学习规划
现在你已经了解了React的全貌,接下来我们将学习如何搭建React开发环境。