vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3 hooks封装节流和防抖

Vue3通过hooks方式封装节流和防抖的代码详解

作者:侯亮平

vue3 中的 hooks 就是函数的一种写法,就是将文件的一些单独功能的js代码进行抽离出来,放到单独的js文件中,或者说是一些可以复用的公共方法/功能,本文给大家介绍了Vue3通过hooks方式封装节流和防抖,需要的朋友可以参考下

创建 useThrottle Hook

节流函数的作用是确保一个函数在一段时间内只能被执行一次,即使它被连续调用多次也只会执行一次。

import { ref, onBeforeUnmount } from 'vue';

function useThrottle(callback, delay = 100) {
  let timerId = ref(null);

  const cancel = () => {
    if (timerId.value !== null) {
      clearTimeout(timerId.value);
      timerId.value = null;
    }
  };

  const throttledCallback = (...args) => {
    if (!timerId.value) {
      timerId.value = setTimeout(() => {
        callback(...args);
        timerId.value = null;
      }, delay);
    }
  };

  onBeforeUnmount(cancel); // 在组件卸载前清除定时器

  return [throttledCallback, cancel];
}

export default useThrottle;

创建 useDebounce Hook

防抖函数则是确保在一个给定的时间段内,只有最后一次操作会触发函数执行,如果在这段时间内还有新的操作发生,则重新计时。

import { ref, onBeforeUnmount } from 'vue';

function useDebounce(callback, delay = 100) {
  let timerId = ref(null);

  const cancel = () => {
    if (timerId.value !== null) {
      clearTimeout(timerId.value);
      timerId.value = null;
    }
  };

  const debouncedCallback = (...args) => {
    cancel(); // 取消之前的定时器
    timerId.value = setTimeout(() => {
      callback(...args);
    }, delay);
  };

  onBeforeUnmount(cancel); // 在组件卸载前清除定时器

  return [debouncedCallback, cancel];
}

export default useDebounce;

解析

在 Vue 组件中使用这些 hooks

<template>
  <div>
    <button @click="handleClick">Click me</button>
    <p>Clicked at: {{ lastClickTime }}</p>
  </div>
</template>

<script>
import useThrottle from './useThrottle';
import useDebounce from './useDebounce';

export default {
  setup() {
    const lastClickTime = ref('');
    const handleAction = () => {
      lastClickTime.value = new Date().toISOString();
    };

    // 使用节流
    const [handleClickThrottled] = useThrottle(handleAction, 500);

    // 或者使用防抖
    // const [handleClickDebounced] = useDebounce(handleAction, 500);

    return {
      lastClickTime,
      handleClick: handleClickThrottled,
      // 或者使用防抖版本
      // handleClick: handleClickDebounced,
    };
  },
};
</script>

这样,每次点击按钮时,节流或防抖处理函数就会被调用,并更新 lastClickTime。你可以根据需要选择使用节流或防抖处理函数。

以上就是Vue3通过hooks方式封装节流和防抖的代码详解的详细内容,更多关于Vue3 hooks封装节流和防抖的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文