首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >useState状态管理核心 Hook【二】

useState状态管理核心 Hook【二】

作者头像
贺公子之数据科学与艺术
发布2025-12-18 08:33:50
发布2025-12-18 08:33:50
960
举报
useCallback:缓存回调函数

在函数组件中,每次渲染都会重新定义内部函数,导致不必要的性能开销。useCallback 用于缓存回调函数,仅在依赖项变化时重新创建。

代码语言:javascript
复制
const handleIncrement = useCallback(
  () => setCount(count + 1),
  [count] // 依赖项
);
useMemo:缓存计算结果

useMemo 用于缓存计算结果,避免重复计算。适用于依赖项未变化时的复杂计算场景。

代码语言:javascript
复制
const filteredUsers = useMemo(
  () => users.filter(user => user.name.includes(searchKey)),
  [users, searchKey] // 依赖项
);
useRef:共享跨渲染数据

useRef 用于在多次渲染间共享数据,常用于保存 DOM 引用或计时器 ID 等。

代码语言:javascript
复制
const timerRef = useRef(null); // 初始化
timerRef.current = setInterval(() => {}, 1000); // 赋值
clearInterval(timerRef.current); // 使用
useContext:跨组件共享状态

useContext 用于在组件树中共享状态,避免逐层传递 props。需配合 React.createContext 使用。

代码语言:javascript
复制
const ThemeContext = React.createContext('light'); // 创建 Context
const theme = useContext(ThemeContext); // 消费 Context
综合示例:计时器组件

结合 useRefuseState 实现计时器功能:

代码语言:javascript
复制
function Timer() {
  const [count, setCount] = useState(0);
  const timerRef = useRef(null);

  const start = () => {
    timerRef.current = setInterval(() => {
      setCount(c => c + 1);
    }, 1000);
  };

  const pause = () => {
    clearInterval(timerRef.current);
  };

  return (
    <div>
      <p>{count}</p>
      <button onClick={start}>Start</button>
      <button onClick={pause}>Pause</button>
    </div>
  );
}
关键点总结
  • 性能优化useCallbackuseMemo 通过缓存减少不必要的计算和渲染。
  • 数据共享useRef 提供跨渲染的数据存储能力。
  • 状态管理useContext 简化跨组件状态共享逻辑。
  • 依赖项数组:明确声明依赖项是正确使用 Hooks 的核心。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • useCallback:缓存回调函数
  • useMemo:缓存计算结果
  • useRef:共享跨渲染数据
  • useContext:跨组件共享状态
  • 综合示例:计时器组件
  • 关键点总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档