vue3 学习笔记13 -- 生命周期和防抖节流

vue3 学习笔记13 – 生命周期和防抖节流

生命周期

  • 创建周期(Composition API)
    • setup(): 这不是生命周期钩子,但它是组合API的入口点,用于执行任何启动逻辑。
  • 更新周期
    • onBeforeMount(): 在组件挂载之前调用,此时虚拟 DOM 已经准备好,但尚未渲染到页面上

    • onMounted(): 在组件挂载后调用,此时组件已经被添加到页面中,可以执行 DOM 操作或异步请求等操作。

    • onBeforeUpdate(): 在组件更新之前调用,可以用于准备更新前的数据状态。

    • onUpdated(): 在组件更新完成后调用,可以执行一些 DOM 操作。

  • 卸载周期
    • onBeforeUnmount(): 在组件卸载之前调用,可以用来清理定时器或取消事件监听器等

    • onUnmounted(): 在组件卸载后调用,执行一些清理工作。

  • 错误处理周期
    • onErrorCaptured(): 在子组件抛出未捕获异常时调用,可以用来收集错误信息或者进行日志记录
         onErrorCaptured((error, vm, info) => {
           console.error('Captured error:', error);
         });
      

防抖和节流

  • utils/index.ts文件下封装使用
export function useDebounce(callback: Function, delay: number) {
  let timer: NodeJS.Timeout | null = null;

  return function() {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      callback.apply(this, arguments);
    }, delay);
  };
}

export function useThrottle(callback: Function, delay: number) {
  let throttling = false;

  return function() {
    if (!throttling) {
      throttling = true;
      setTimeout(() => {
        callback.apply(this, arguments);
        throttling = false;
      }, delay);
    }
  };
}
防抖 (Debounce)

防抖函数用于延迟执行一个函数,直到一个连续动作的最后一次发生后,一段时间内没有新的动作产生。

  • 组件中使用
<template>
  <button @click="handleClick">Click me</button>
  <p>Count: {{ count }}</p>
</template>

<script setup lang="ts">
import { useDebounce } from '../utils/debounce';

const count = ref(0);

const debouncedIncrement = useDebounce(() => {
  count.value++;
}, 500); // 500ms 防抖

const handleClick = () => {
  debouncedIncrement();
};
</script>

节流 (Throttle)

节流函数用于减少函数的调用频率,确保在一定时间内只执行一次。

  • 组件中使用
<template>
  <button @click="handleClick">Click me</button>
  <p>Count: {{ count }}</p>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import { useThrottle } from '../utils/throttle';

const count = ref(0);

const throttledIncrement = useThrottle(() => {
  count.value++;
}, 500); // 每500ms节流- 每500ms执行一次

const handleClick = () => {
  throttledIncrement();
};
</script>


相关推荐

  1. vue3 学习笔记13 -- 生命周期

    2024-07-17 10:44:01       24 阅读
  2. 学习笔记16)函数

    2024-07-17 10:44:01       32 阅读
  3. 2024-07-17 10:44:01       30 阅读
  4. 2024-07-17 10:44:01       31 阅读
  5. vue中的

    2024-07-17 10:44:01       58 阅读
  6. 2024-07-17 10:44:01       45 阅读
  7. 【前端】

    2024-07-17 10:44:01       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 10:44:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 10:44:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 10:44:01       58 阅读
  4. Python语言-面向对象

    2024-07-17 10:44:01       69 阅读

热门阅读

  1. 命令行导入sql文件【以Ubuntu为例】

    2024-07-17 10:44:01       21 阅读
  2. NLP篇5:自然语言处理预训练

    2024-07-17 10:44:01       20 阅读
  3. N叉树的前序遍历

    2024-07-17 10:44:01       26 阅读
  4. CopyOnWriteArrayList

    2024-07-17 10:44:01       22 阅读
  5. Qt编程技巧总结篇(4)-信号-槽-多线程(三)

    2024-07-17 10:44:01       23 阅读
  6. 【面试题】Golang之互斥锁与读写锁(第七篇)

    2024-07-17 10:44:01       22 阅读
  7. windows 安装 tensorflow 报错说 C++

    2024-07-17 10:44:01       22 阅读
  8. Vue 和 React 框架实现滚动缓冲区

    2024-07-17 10:44:01       21 阅读
  9. Mysql什么情况下会发生死锁,又该怎么解决?

    2024-07-17 10:44:01       25 阅读
  10. 服务器上有多个nginx,如何知道启动的是哪个?

    2024-07-17 10:44:01       25 阅读