React 自定义hook 之 防抖和节流

一、简介

        防抖和节流主要用于控制事件触发频率,提高页面性能和用户体验。

        防抖: 当事件被触发后,在一定时间内有新的对应事件,则会取消老的事件执行。

        节流: 当事件触发后,在一定时间内会忽略新的事件执行。

二、技术实现

1、useDebounce hook

export const useDebounce = (state, delay) => {
    const [debounceState, setDebounceState] = useState(null);
    
    useEffect(() => {
        const timeout =  setTimeout(() => {
            setDebounceParam({
                ...state,
            });
        }, delay);
        return () => clearTimeout(timeout);
    }, [state]);
    

    return debounceState;
}

使用样例:

export UserComponent = ()=>{
    const [userName, setUserName] = useState("");
    const [user, setUser] = useState({});
    const debounceUserName = useDebounce(userName, 300);
    useEffect(() => {
        User user = getUserByUserName(userName);
        setUser(...user);
    }, [debounceUserName]);
    
    return (
    <div>
        用户名:<input type = 'text' value = {userName} onChange = {setUserName}/>
        用户信息: <span>{user.info}</span>
    <div/>    
    );
}

2.useThrottle hook

export const useThrottle = (state, limit) =>{
    const [throttleState, setThrottleState] = useState(null);
    // 记录下上次触发的时间
    const [lastTrigger, setLastTrigger] = useState(Date.now());
    
    useEffect(() => { 
        if (Date.now() - lastTrigger < dealy){
                return;
        }
        setThrottleState(state);
        setLastTrigger(Date.now());
    }, [state])

    return throttleState;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值