【React】防抖自定义hook,狸猫换太子

前言

  • 我这也是看了别人学到的,一般我们防抖就写个防抖函数然后一套就完事了,我看见的这个防抖hook思路清奇,玩了个狸猫换太子,让我想记录下来。

思路

  • 比如输入框要触发个搜索查询,那么就搞个防抖,正常来说,我们把防抖函数套在原来执行逻辑上就ok,实际频繁触发的是防抖函数,而不是防抖包着的那个函数。
  • 而我这次看见的这个思路是延迟值的内部更新。
  • 就是在受控组件里,用户输入的值会在组件的状态中,这个hook自己维护一个状态,替代原来组件真正的值的状态,而执行函数,从本来依赖真正的值,到依赖这个替代的值,利用useEffect进行延迟触发。
  • 代码:
function useDebounce(value:any,delay=300){
    const [debounceValue,setDebouncedValue]=useState(value)
    useEffect(()=>{
        const handler=setTimeout(() => {
            setDebouncedValue(value)
        }, delay)
        return ()=>{
            clearTimeout(handler)
        }
    },[value,delay])
    return debounceValue
}
export default useDebounce
  • 使用:
 const debouncedValue=useDebounce(state,500)
  • 这个debouncedValue就是替代了state的假值,state会根据用户输入不断改变,但是debouncedValue不会立即跟着改变,而是通过handler的延迟函数进行改变,当频繁触发时,直接卸载以前的定时器,制作新的定时器触发,这个地方跟原本的防抖函数一样。
  • 最后需要执行的函数通过useEffect依赖这个被替代的state即可。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

业火之理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值