1. React Hooks 核心概念解析
React Hooks 是 React 16.8 引入的革命性特性,它彻底改变了我们编写 React 组件的方式。传统 class 组件中的生命周期方法、状态管理和副作用处理,现在都可以通过一系列简洁的函数式 API 来实现。
Hooks 的核心价值在于解决了三个关键问题:
- 状态逻辑难以复用:以往需要通过高阶组件或render props实现的逻辑复用,现在可以通过自定义Hook轻松完成
- 复杂组件难以理解:生命周期方法经常包含不相关的逻辑,导致代码难以维护
- 类组件学习成本高:this绑定、生命周期方法等概念对新手不够友好
提示:Hooks 100%向后兼容,你可以在不重写现有组件的情况下逐步采用它们
1.1 数据驱动与状态管理
useState 是最基础的Hook,它让我们在函数组件中也能拥有状态管理能力。与传统class组件的this.state不同,useState返回的状态是独立的,你可以多次调用useState来管理不同的状态变量。
javascript复制function Counter() {
const [count, setCount] = useState(0);
const [name, setName] = useState('初始名称');
return (
<div>
<p>你点击了{count}次</p>
<button onClick={() => setCount(count + 1)}>
点击
</button>
<input value={name} onChange={e => setName(e.target.value)} />
</div>
);
}
useReducer 是另一个状态管理Hook,适合处理复杂的状态逻辑。它接收一个reducer函数和初始状态,返回当前状态和dispatch方法,与Redux的工作方式类似。
javascript复制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:
throw new Error();
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
当前值: {state.count}
<button onClick={() => dispatch({type: 'decrement'})}>-</button>
<button onClick={() => dispatch({type: 'increment'})}>+</button>
</>
);
}
2. 副作用处理与性能优化
2.1 useEffect 深度解析
useEffect 是处理副作用的瑞士军刀,它合并了class组件中的componentDidMount、componentDidUpdate和componentWillUnmount三个生命周期方法。
j复制
解锁全文
加入我们的会员,获取最新、最热、最精彩的开发者技术内容