react hooks如何用
使用 React Hooks 的基本方法
React Hooks 是 React 16.8 引入的功能,允许在函数组件中使用状态和其他 React 特性。以下是几种常用 Hooks 的用法。
useState
useState 用于在函数组件中添加状态管理。它返回一个状态值和一个更新状态的函数。
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
useEffect
useEffect 用于处理副作用,如数据获取、订阅或手动 DOM 操作。它可以替代生命周期方法如 componentDidMount、componentDidUpdate 和 componentWillUnmount。

import React, { useState, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
useEffect(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => setData(data));
}, []); // 空依赖数组表示仅在组件挂载时运行
return <div>{data ? data.message : 'Loading...'}</div>;
}
useContext
useContext 用于在组件中访问 React 的 Context,避免多层传递 props。
import React, { useContext } from 'react';
const ThemeContext = React.createContext('light');
function ThemedButton() {
const theme = useContext(ThemeContext);
return <button style={{ background: theme === 'dark' ? '#333' : '#eee' }}>Themed Button</button>;
}
useReducer
useReducer 是 useState 的替代方案,适用于复杂状态逻辑。

import React, { useReducer } from 'react';
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 (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'increment' })}>+</button>
<button onClick={() => dispatch({ type: 'decrement' })}>-</button>
</div>
);
}
useMemo 和 useCallback
useMemo 用于缓存计算结果,useCallback 用于缓存函数。
import React, { useMemo, useCallback } from 'react';
function ExpensiveComponent({ list }) {
const sortedList = useMemo(() => list.sort(), [list]);
const handleClick = useCallback(() => {
console.log('Clicked');
}, []);
return (
<div>
<ul>
{sortedList.map(item => <li key={item}>{item}</li>)}
</ul>
<button onClick={handleClick}>Click Me</button>
</div>
);
}
自定义 Hooks
可以创建自定义 Hooks 来复用状态逻辑。
import { useState, useEffect } from 'react';
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
return width;
}
function ResponsiveComponent() {
const width = useWindowWidth();
return <div>Window width: {width}px</div>;
}
注意事项
- Hooks 只能在函数组件的顶层调用,不能在循环、条件或嵌套函数中使用。
- 自定义 Hook 的名称应以
use开头,以便 React 识别其为 Hook。 useEffect的依赖数组需谨慎处理,避免不必要的重新渲染或遗漏依赖。






