
useState 是 React Hooks 中最基础的 Hook,用于在函数组件中添加状态管理能力。其核心作用是在组件的多次渲染间维持状态的一致性。语法如下:
const [state, setState] = useState(initialValue);initialValue 可以是任意数据类型(数字、字符串、对象等),仅在组件首次渲染时生效。const [count, setCount] = useState(0);
const [user, setUser] = useState({ name: 'Alice' });最佳实践:
useEffect 用于处理与渲染无关的副作用操作,如数据请求、DOM 操作等。其执行时机是在每次渲染完成后(包括首次渲染),根据依赖项决定是否重新执行。
useEffect(() => {
// 副作用逻辑
return () => { /* 清理函数 */ };
}, [dependencies]);依赖项控制:
// 模拟 componentDidMount
useEffect(() => {
fetchData().then(data => setData(data));
}, []);
// 依赖项控制
useEffect(() => {
const timer = setInterval(() => {}, 1000);
return () => clearInterval(timer); // 清理函数
}, [needTimer]);异步处理: 避免直接在 useEffect 回调中使用 async/await,需嵌套定义异步函数:
useEffect(() => {
const loadData = async () => {
const res = await fetch(url);
setData(await res.json());
};
loadData();
}, [url]);对于类组件开发者,理解 Hooks 与传统生命周期的对应关系有助于过渡:
useEffect(fn, [])useEffect(fn, [deps])useEffect(() => { return cleanupFn }, [])const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]);// 自定义 Hook 示例
function useWindowSize() {
const [size, setSize] = useState(window.innerWidth);
useEffect(() => {
const handler = () => setSize(window.innerWidth);
window.addEventListener('resize', handler);
return () => window.removeEventListener('resize', handler);
}, []);
return size;
}