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

news/2024/8/26 10:30:03 标签: 学习, 笔记, 前端

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>



http://www.niftyadmin.cn/n/5558431.html

相关文章

LLM大语言模型研究方向总结剖析

大语言模型&#xff08;LLM&#xff09;的研究方向主要涵盖以下几个方面&#xff1a; 1. 模型架构改进 目标&#xff1a;提高模型的性能和通用性&#xff0c;减少计算资源消耗。方法&#xff1a; 混合专家模型&#xff08;Mixture of Experts, MoE&#xff09;&#xff1a;通…

邮箱验证码功能开发

该文章用于记录怎么进行邮箱验证码开发。 总所周知&#xff0c;我们在某些网站进行注册的适合总是会遇到什么填写邮箱&#xff0c;邮箱接收验证码&#xff0c;验证通过后才可以继续注册&#xff0c;那么这个功能是怎么实现的呢&#xff1f; 一&#xff0c;准备工作 1.1 邮箱…

AppML 案例:Products

AppML 案例&#xff1a;Products AppML&#xff08;Application Markup Language&#xff09;是一种创新的、基于XML的标记语言&#xff0c;旨在简化Web应用程序的开发。它允许开发者通过声明性的方式定义应用程序的界面和数据绑定&#xff0c;从而提高开发效率和减少代码量。…

docker 启动提示can not create sys fs cgroup cpuset....问题处理

docker 启动失败 报错 大概报错内容为 cgroup :no such file can not create /sys/fs/cgroup/cpuset … 问题是因为 /sys/fs/cgroup/ 没有被正确挂载 cgroup 是实现资源限制的工具 docker 能够进行限制cpu 内存 大小 依赖cgroup ll /sys/fs/cgroup/ 发现一个都系也没有 m…

微信小程序:2.全局开发

app实例 简介 app.js中注册小程序实例的方法App拥有生命周期回调函数、错误监听函数、页面不存在监听函数等 生命周期回调函数 onLaunch(options) {//监听小程序初始化 console.log("监听小程序初始化",options); }, onShow (options) {//监听小程序启动或切前台…

客服新纪元:Transformer模型在自动化客户服务的革命性应用

客服新纪元&#xff1a;Transformer模型在自动化客户服务的革命性应用 随着人工智能技术的飞速发展&#xff0c;自动化客户服务已成为企业提升效率、降低成本的关键途径。Transformer模型&#xff0c;以其在处理序列数据方面的强大能力&#xff0c;正在自动化客户服务领域扮演…

搜维尔科技:Riablo提供一种创新的康复解决方案,通过激活本体感觉,并通过视听反馈促进神经肌肉的训练。

Riablo提供一种创新的康复解决方案&#xff0c;通过激活本体感觉&#xff0c;并通过视听反馈促进神经肌肉的训练。 搜维尔科技&#xff1a;Riablo提供一种创新的康复解决方案&#xff0c;通过激活本体感觉&#xff0c;并通过视听反馈促进神经肌肉的训练。

基于深度学习的游戏AI

基于深度学习的游戏AI涉及使用深度学习模型来提升游戏中的智能行为&#xff0c;包括自动化角色操作、环境交互、策略制定等。以下是这一领域的系统介绍&#xff1a; 1. 任务和目标 游戏AI的主要任务和目标包括&#xff1a; 角色控制&#xff1a;通过深度学习模型控制游戏中的…