React 核心概念:从入门到进阶的完整指南
React 是由 Facebook 开发的用于构建用户界面的 JavaScript 库。它以组件化、声明式编程和单向数据流等特点深受开发者欢迎。本文将详细介绍 React 的核心概念,帮助你深入理解 React 开发。

目录
- 组件基础
- Props 和 State
- 生命周期
- Hooks 系统
- 状态管理
- 性能优化
- 最佳实践
组件基础
1. 函数组件
函数组件是最简单的 React 组件形式:
1 2 3 4 5 6 7 8
| function Welcome(props) { return <h1>你好, {props.name}</h1>; }
const Welcome = (props) => { return <h1>你好, {props.name}</h1>; };
|
2. 类组件
类组件提供了更多的特性:
1 2 3 4 5
| class Welcome extends React.Component { render() { return <h1>你好, {this.props.name}</h1>; } }
|
3. 组件组合
组件可以相互嵌套形成复杂的界面:
1 2 3 4 5 6 7 8 9 10 11 12
| function App() { return ( <div> <Header /> <MainContent> <Sidebar /> <Content /> </MainContent> <Footer /> </div> ); }
|
Props 和 State
1. Props(属性)
Props 是组件的只读属性,用于组件间的数据传递:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function ParentComponent() { return <ChildComponent name="张三" age={25} />; }
function ChildComponent(props) { return ( <div> <p>姓名:{props.name}</p> <p>年龄:{props.age}</p> </div> ); }
|
2. State(状态)
State 是组件的内部状态,可以通过 setState 更新:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Counter extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; }
increment = () => { this.setState(prevState => ({ count: prevState.count + 1 })); };
render() { return ( <div> <p>计数:{this.state.count}</p> <button onClick={this.increment}>增加</button> </div> ); } }
|
3. 单向数据流
React 推崇单向数据流,数据总是从父组件流向子组件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function Parent() { const [value, setValue] = useState('');
const handleChange = (newValue) => { setValue(newValue); };
return <Child value={value} onChange={handleChange} />; }
function Child({ value, onChange }) { return ( <input value={value} onChange={(e) => onChange(e.target.value)} /> ); }
|
生命周期
1. 挂载阶段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class MyComponent extends React.Component { constructor(props) { super(props); }
static getDerivedStateFromProps(props, state) { return null; }
componentDidMount() { }
render() { return <div>组件内容</div>; } }
|
2. 更新阶段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class MyComponent extends React.Component { shouldComponentUpdate(nextProps, nextState) { return true; }
getSnapshotBeforeUpdate(prevProps, prevState) { return null; }
componentDidUpdate(prevProps, prevState, snapshot) { } }
|
3. 卸载阶段
1 2 3 4 5 6
| class MyComponent extends React.Component { componentWillUnmount() { } }
|
Hooks 系统
1. useState
管理组件状态:
1 2 3 4 5 6 7 8 9 10 11 12
| function Counter() { const [count, setCount] = useState(0);
return ( <div> <p>计数:{count}</p> <button onClick={() => setCount(count + 1)}> 增加 </button> </div> ); }
|
2. useEffect
处理副作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function UserProfile({ userId }) { const [user, setUser] = useState(null);
useEffect(() => { async function fetchUser() { const response = await fetch(`/api/users/${userId}`); const data = await response.json(); setUser(data); }
fetchUser(); }, [userId]);
if (!user) return <div>加载中...</div>; return <div>{user.name}</div>; }
|
3. useContext
跨组件共享数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const ThemeContext = React.createContext('light');
function App() { return ( <ThemeContext.Provider value="dark"> <Toolbar /> </ThemeContext.Provider> ); }
function Toolbar() { const theme = useContext(ThemeContext); return ( <button className={theme}> 按钮 </button> ); }
|
4. useReducer
管理复杂状态逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const initialState = { count: 0 };
function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } }
function Counter() { const [state, dispatch] = useReducer(reducer, initialState);
return ( <div> <p>计数:{state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>+</button> <button onClick={() => dispatch({ type: 'decrement' })}>-</button> </div> ); }
|
状态管理
1. Context API
适用于简单的全局状态管理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const UserContext = React.createContext();
function UserProvider({ children }) { const [user, setUser] = useState(null);
const login = (userData) => { setUser(userData); };
const logout = () => { setUser(null); };
return ( <UserContext.Provider value={{ user, login, logout }}> {children} </UserContext.Provider> ); }
|
2. Redux
适用于复杂的状态管理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const INCREMENT = 'INCREMENT'; const DECREMENT = 'DECREMENT';
function counterReducer(state = 0, action) { switch (action.type) { case INCREMENT: return state + 1; case DECREMENT: return state - 1; default: return state; } }
const store = createStore(counterReducer);
|
性能优化
1. React.memo
防止不必要的重渲染:
1 2 3 4 5
| const MyComponent = React.memo(function MyComponent(props) { return ( <div>{props.name}</div> ); });
|
2. useMemo
缓存计算结果:
1 2 3 4 5 6 7
| function ExpensiveComponent({ data }) { const processedData = useMemo(() => { return expensiveOperation(data); }, [data]);
return <div>{processedData}</div>; }
|
3. useCallback
缓存函数引用:
1 2 3 4 5 6 7 8 9
| function ParentComponent() { const [count, setCount] = useState(0);
const handleClick = useCallback(() => { setCount(c => c + 1); }, []);
return <ChildComponent onClick={handleClick} />; }
|
最佳实践
1. 组件设计原则
- 单一职责原则
- 保持组件纯粹
- 适当的组件粒度
- 合理使用 Props 和 State
2. 代码组织
1 2 3 4 5 6 7
| src/ ├── components/ # 可复用组件 ├── pages/ # 页面组件 ├── hooks/ # 自定义 Hooks ├── context/ # Context 相关 ├── utils/ # 工具函数 └── styles/ # 样式文件
|
3. 错误处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; }
static getDerivedStateFromError(error) { return { hasError: true }; }
componentDidCatch(error, errorInfo) { console.error('错误信息:', error, errorInfo); }
render() { if (this.state.hasError) { return <h1>出错了!</h1>; }
return this.props.children; } }
|
总结
React 的核心概念包括组件化、Props 和 State、生命周期、Hooks 等。掌握这些概念对于开发高质量的 React 应用至关重要。随着不断实践,你会发现 React 的优雅之处在于它提供了一种声明式的方式来构建用户界面,同时保持了足够的灵活性。
学习资源
本文将持续更新,欢迎关注最新的 React 开发动态。