当前位置: 首页 > news >正文

合React宝宝体质的自定义节流hook

本文为开发开源项目的真实开发经历,感兴趣的可以来给我的项目点个star,谢谢啦~

具体博文介绍:
开源|Documind协同文档(接入deepseek-r1、支持实时聊天)Documind 🚀 一个支持实时聊天和接入 - 掘金

为什么不推荐使用第三方库实现节流函数?

像节流防抖这类易实现的函数推荐手写而不使用库函数,为什么现在支持Tree Shaking按需引入还需要手写?因为可以根据实际情况高度定制和简化代码(体积更小)以及性能优化,当然手写不易实现的功能还是需要使用第三方库,所以我推荐采用混合策略:核心路径代码手写优化 + 复杂功能使用高质量小型库。

纯js实现一个基础节流函数
function debounce(fn, delay) {
  let timer = null;
  const _debounce = function (...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
  return _debounce;
}

react实现一个基础节流函数
import {useCallback, useRef} from "react";

export function useDebounce<
  T extends (...args: Parameters<T>) => ReturnType<T>,
>(callback: T, delay: number = 500) {
  const timeoutRef = useRef<NodeJS.Timeout>();

  return useCallback((...args: Parameters<T>) => {
    if (timeoutRef.current) {
      clearTimeout(timeoutRef.current);
    }
    
    timeoutRef.current = setTimeout(() => {
      callback(...args);
    }, delay);
  }, [callback, delay]);
}

总结

React 版本的防抖钩子通过 useCallback 保持函数引用稳定避免子组件无效渲染,依赖数组自动更新最新回调函数和延迟参数,集成 React 生命周期自动清理定时器,配合 TypeScript 泛型保留完整类型提示,完美适配函数组件开发模式,从根本上解决了普通防抖函数在 React 中容易产生的闭包陷阱和内存泄漏问题。

以上demo都为基础版本,可以根据具体需求在demo上定制,此处就不再赘述。

相关文章:

  • Compose 实践与探索十 —— 其他预先处理的 Modifier
  • vscode python相对路径的问题
  • 基于 Verilog 的数字电路设计与仿真:乘数器与多路复用器实践
  • LVGL第三方库的使用(中文库)
  • windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC
  • Vue3 开发的 VSCode 插件
  • 996引擎 - 红点系统
  • 前端面试题---vue项目打包时, 内存不足了怎么办 为什么会出现这样的情况
  • SpringBoot事件驱动
  • 翻硬币问题
  • 【Docker compose】neo4j容器安装apoc插件
  • 医疗送药机器人“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用
  • 【WiFi 7核心技术及未来挑战】
  • 搭建刷题专业版小程序系统
  • 【机器学习chp13--(上)】人工神经网络(MLP结构 + KAN结构 + 卷积神经网络)
  • AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴
  • 4.2 Reactive 对象的深度类型约束方案
  • 婚恋之红娘相亲小程序开发功能与设计详解
  • 福特售后再添亮点,为烈马模块化车身改装提供专业支持
  • Qt运行xxx.so can not open shared object file
  • 公积金利率降至历史最低!多项房地产利好政策落地,购房者置业成本又降了
  • 魔都眼|上海多家商场打开绿色通道,助力外贸出口商品转内销
  • 41年轮回,从洛杉矶奔向洛杉矶,李宁故地重游再出发
  • “子宫肌瘤男性病例”论文后:“宫颈癌、高危产妇”论文也现男性病例,作者称“打错了”
  • 山大齐鲁医院通报“子宫肌瘤论文现男性患者”:存在学术不端
  • 杨德龙:取得长期投资胜利法宝,是像巴菲特一样践行价值投资