news 2026/6/23 15:38:54

React Hooks常用方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
React Hooks常用方法

React 目前强烈推荐使用函数组件(Functional Components)结合 Hooks来开发。它更简洁、灵活、可复用性更强,是现代 React 开发的主流方式。

本文重点介绍函数组件中最常用的 Hooks,帮助你快速掌握状态管理、副作用处理等核心能力。

一、常用 Hooks 详解

1. useState:管理组件状态

最基础的状态管理 Hook,用于在函数组件中添加局部状态。

import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); // 初始值 0 return ( <div> <p>当前计数:{count}</p> <button onClick={() => setCount(count + 1)}>加 1</button> <button onClick={() => setCount(prev => prev + 1)}>函数式更新</button> </div> ); }
  • setCount支持直接传新值或函数式更新(推荐后者,避免闭包问题)
  • 状态更新是异步的,会合并多次更新

2. useEffect:处理副作用

用于处理数据获取、订阅、定时器等副作用操作。

import React, { useState, useEffect } from 'react'; function Timer() { const [seconds, setSeconds] = useState(0); useEffect(() => { const timer = setInterval(() => { setSeconds(prev => prev + 1); }, 1000); // 清理函数:组件卸载时执行 return () => clearInterval(timer); }, []); // 空依赖数组:只在挂载时执行一次 return <div>已运行 {seconds} 秒</div>; }

依赖数组规则:

  • 无依赖数组:每次渲染后都执行
  • []:仅在组件挂载和卸载时执行一次
  • [dep1, dep2]:指定依赖变化时执行

3. useContext:消费 Context

避免 props 层层传递全局数据(如主题、用户信息)。

import React, { useContext } from 'react'; const ThemeContext = React.createContext('light'); function Button() { const theme = useContext(ThemeContext); return <button style={{ background: theme === 'dark' ? '#333' : '#fff' }}> 当前主题:{theme} </button>; }

4. useReducer:复杂状态逻辑管理

适合状态更新逻辑复杂、涉及多个子值或依赖前一个状态时。

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 }; case 'reset': return initialState; default: return state; } } function Counter() { const [state, dispatch] = useReducer(reducer, initialState); return ( <> Count: {state.count} <button onClick={() => dispatch({ type: 'increment' })}>加</button> <button onClick={() => dispatch({ type: 'decrement' })}>减</button> <button onClick={() => dispatch({ type: 'reset' })}>重置</button> </> ); }

5. useRef:获取 DOM 或保存可变值

  • 获取 DOM 元素
  • 保存不触发渲染的可变值
import React, { useRef, useEffect } from 'react'; function TextInput() { const inputRef = useRef(null); const focusInput = () => { inputRef.current?.focus(); }; useEffect(() => { focusInput(); // 自动聚焦 }, []); return ( <> <input ref={inputRef} type="text" /> <button onClick={focusInput}>手动聚焦</button> </> ); }

6. useMemo:缓存计算结果

避免昂贵计算在每次渲染时重复执行。

const expensiveValue = useMemo(() => { return computeExpensiveValue(a, b); }, [a, b]); // 只有 a 或 b 变化时重新计算

7. useCallback:缓存函数

防止子组件因函数引用变化而重复渲染。

const handleClick = useCallback(() => { // 处理逻辑 }, [dependency]);

二、其他实用 Hooks

  • useLayoutEffect:在 DOM 更新后同步执行,适合测量布局
  • useImperativeHandle:配合 forwardRef 自定义暴露给父组件的实例值
  • useDeferredValue:延迟更新非紧急状态(React 18+)
  • useTransition:标记过渡更新,保持 UI 响应性(React 18+)

总结

掌握以下核心 Hooks 即可应对 90% 的开发场景:

  • useState+useEffect:基础状态与副作用
  • useContext:全局数据共享
  • useReducer:复杂状态逻辑
  • useRef:DOM 操作与持久值
  • useMemo/useCallback:性能优化

函数组件 + Hooks 是 React 的未来,代码更清晰、逻辑更集中,强烈推荐在新项目中全面使用!

有任何 Hooks 使用疑问,欢迎留言交流~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 15:33:15

国产 SerDes(02):锐泰微

锐泰微&#xff08;北京&#xff09;电子科技有限公司成立于2021年&#xff0c;专注于高性能模拟信号链前端芯片、高速接口芯片等产品的研发&#xff0c;聚焦新能源汽车、以及工业控制等市场领域的进口芯片替代。 锐泰微基于自研C Lync Serdes技术推出的车规级视频传输产品&…

作者头像 李华
网站建设 2026/6/23 16:25:58

动态数据合成的AI方法在软件测试中的应用与挑战

在软件测试领域&#xff0c;数据是驱动测试过程的核心要素。然而&#xff0c;测试数据的获取与管理长期面临诸多挑战&#xff1a;真实数据涉及隐私与合规风险、静态数据难以覆盖边缘场景、数据生成效率无法匹配敏捷开发节奏。传统解决方案如人工构造数据或基于规则生成&#xf…

作者头像 李华
网站建设 2026/6/22 15:34:29

容器化测试与AI的融合趋势

随着云原生应用的普及&#xff0c;容器化测试已成为软件开发生命周期中不可或缺的一环。容器技术通过隔离环境、快速部署和弹性伸缩&#xff0c;解决了传统测试中的环境不一致和资源浪费问题。然而&#xff0c;测试过程仍面临挑战&#xff0c;如测试用例维护复杂、性能瓶颈难以…

作者头像 李华
网站建设 2026/6/22 15:45:17

人工智能大模型新浪潮:五大突破性工具深度解析

人工智能领域正在以惊人的速度发展&#xff0c;每个月都有新的突破。最近几个月&#xff0c;几家领先的AI公司发布了令人瞩目的新模型和工具&#xff0c;这些进展正在重新定义我们与机器交互的方式。本文将深度解析最近发布的五个重要AI工具&#xff0c;探讨它们的技术创新、应…

作者头像 李华
网站建设 2026/6/23 9:24:43

地表水与污染物监测指标解析

什么是地表水&#xff1f;地表水是指存在于地球表面&#xff0c;暴露于大气中的各种水体的总称。它是与“地下水”相对应的概念。主要存在形式&#xff1a;包括河流、湖泊、水库、池塘、溪流、冰川、沼泽以及海洋&#xff08;海水是特殊的地表水&#xff0c;通常单独讨论&#…

作者头像 李华
网站建设 2026/6/22 13:58:39

终极指南:用Vuetify VCalendar快速打造专业级日程管理系统 [特殊字符]

还在为复杂的日程管理需求发愁吗&#xff1f;Vuetify的VCalendar组件将彻底改变你的开发体验&#xff01;作为Vue.js生态中最强大的日程管理解决方案&#xff0c;VCalendar不仅功能全面&#xff0c;而且上手极其简单。本文将带你从零开始&#xff0c;全面掌握这个"日程管理…

作者头像 李华