一、React 的本质理解
React 是一个用于构建用户界面的 声明式、组件化 的 JavaScript 库,由 Facebook 开发并开源。它的核心思想可以概括为:
-
UI = f(state):视图是应用状态的函数
-
虚拟 DOM:通过内存中的轻量级 DOM 表示提高性能
-
单向数据流:数据自上而下流动,保持可预测性
-
组件化开发:将 UI 拆分为独立可复用的代码单元
二、React 的核心特性
1. JSX 语法
JavaScript 的语法扩展,允许在 JS 中编写类似 HTML 的结构:
const element = <h1>Hello, {name}</h1>;
2. 组件化开发
支持 函数组件 和 类组件 两种形式:
// 函数组件(推荐)
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
// 类组件
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
3. 虚拟 DOM (Virtual DOM)
高效更新机制:
-
内存中维护虚拟 DOM 树
-
通过 diff 算法找出最小变更
-
批量更新真实 DOM
4. 单向数据流
数据通过 props 自上而下传递:
<Parent>
<Child data={parentData} />
</Parent>
5. Hooks(React 16.8+)
函数组件中使用状态和其他 React 特性:
import { useState, useEffect } from 'react';
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Count: ${count}`;
}, [count]);
return (
<button onClick={() => setCount(c => c + 1)}>
Clicked {count} times
</button>
);
}
6. 上下文 (Context)
跨组件层级的数据共享:
const ThemeContext = React.createContext('light');
function App() {
return (
<ThemeContext.Provider value="dark">
<Toolbar />
</ThemeContext.Provider>
);
}
function Toolbar() {
return (
<div>
<ThemedButton />
</div>
);
}
function ThemedButton() {
const theme = useContext(ThemeContext);
return <button theme={theme}>I'm styled by theme!</button>;
}
7. 高阶组件 (HOC)
组件复用模式:
function withLogging(WrappedComponent) {
return function(props) {
console.log('Rendering:', WrappedComponent.name);
return <WrappedComponent {...props} />;
};
}
const EnhancedComponent = withLogging(MyComponent);
8. 性能优化
-
React.memo:组件记忆化
-
useMemo/useCallback:值/函数记忆化
-
React.lazy:组件懒加载
三、React 的生态系统
-
状态管理:Redux、MobX、Recoil、Zustand
-
路由:React Router
-
样式方案:CSS Modules、Styled-components、Tailwind CSS
-
服务端渲染:Next.js、Remix
-
静态站点:Gatsby
-
测试:Jest + React Testing Library
四、React 的设计哲学
-
声明式编程:描述"做什么"而非"怎么做"
-
组合优于继承:通过组件组合构建复杂 UI
-
单向数据流:保持数据流动的可预测性
-
学习一次,随处编写:支持 Web、Native (React Native)、VR (React 360) 等
五、React 18 新增特性
-
并发渲染 (Concurrent Rendering)
-
自动批处理 (Automatic Batching)
-
Transition API:区分紧急/非紧急更新
-
新的 Suspense 特性:流式服务端渲染
-
新的 Hooks:如 useId、useSyncExternalStore
React 通过其简洁的设计理念和强大的生态系统,已成为现代前端开发的主流选择之一。其组件化思想和声明式编程模式显著提高了开发效率和代码可维护性。