前阵子在打游戏,突然想起来前端貌似是有什么防抖、节流,就百度了一下,看了一眼没看懂,过了好久才又想起来,遂照着别人的代码码了一下。
参考:
- 经典防抖:人类高质量JS防抖与节流机制
- hooks防抖:React hooks 怎样做防抖?
因为我用的react hooks写的项目,看完经典防抖直接就去试了一下,发现不行,感觉是因为react hooks的特性引发的问题,又去找了一篇react hooks有关的知乎,二者结合了一下,成功。
核心debounce.js
文件:
import {
useCallback, useEffect, useRef } from "react"
function useDebounce(fn, delay, dep = []) {
// useRef 可以跨周期保存数据,不会因重新渲染而被重置,这样定时器就有效了
// 只有单击和连击的最后一次会生效
const {
current } = useRef({
fn, time: null, firsttime: true })
useEffect(function