浅谈VUE防抖与节流的最佳解决方案(函数式组件)

浅谈VUE防抖与节流的最佳解决方案

什么是防抖和节流

防抖和节流是前端开发中常用的性能优化技巧,其中防抖是指防止在短时间内重复触发同一事件,而节流是指在一段时间内最多只能触发一次事件。这两种技术的应用场景主要是为了避免频繁操作引起的性能问题,比如浏览器滚动、输入框输入等。

什么是函数式组件

Vue中,有两种组件,一种是常规的组件,另一种则是函数式组件。函数式组件是一种无状态、无实例的组件,不支持响应式原理和ref属性等,但是由于其不可变的特性,使得其对于实现防抖与节流的最佳方案来说具有一定的优势。

函数式组件实现防抖与节流

防抖的实现

防抖可以通过在组件的props参数中传入一个prop:debounce,其值为防抖的时间间隔,然后在组件的data中保存一个私有变量timeId,用于记录setTimeout的id。具体实现代码如下所示:

<template>
  <button @click="handleClick">点击防抖</button>
</template>

<script>
  export default {
    props: {
      debounce: {
        type: Number,
        default: 300
      }
    },
    data() {
      return {
        timeId: null
      }
    },
    methods: {
      handleClick() {
        if (this.timeId) {
          clearTimeout(this.timeId)
        }
        this.timeId = setTimeout(() => {
          console.log('触发防抖')
        }, this.debounce)
      }
    }
  }
</script>

在上面的代码中,当点击按钮时,就会调用handleClick方法,如果timeId不为空,则说明之前已经设置了setTimeout,需要清除之前的定时器。接着,重新设置一个定时器,在指定的时间间隔内如果没有再次点击,则触发防抖。

节流的实现

节流可以通过在组件的props参数中传入一个prop:throttle,其值为节流的时间间隔,然后在组件的data中保存一个私有变量flag,用于判断是否可以触发节流。具体实现代码如下所示:

<template>
  <button @click="handleClick">点击节流</button>
</template>

<script>
  export default {
    props: {
      throttle: {
        type: Number,
        default: 300
      }
    },
    data() {
      return {
        flag: true
      }
    },
    methods: {
      handleClick() {
        if (!this.flag) {
          return
        }
        this.flag = false
        setTimeout(() => {
          console.log('触发节流')
          this.flag = true
        }, this.throttle)
      }
    }
  }
</script>

在上面的代码中,当点击按钮时,就会调用handleClick方法,如果flag为false,则说明在指定的时间间隔内已经触发过节流,不再执行。如果flag为true,则可以执行节流,同时设置定时器,在指定的时间间隔内将flag设置为true,代表可以再次触发节流。

示例说明

以下是两条示例说明:

示例一:防止搜索框短时间内重复请求

在搜索框中输入关键词时,通常需要使用防抖技术,避免短时间内发起多次请求。可以封装一个函数式组件,通过debounce prop来控制防抖的时间间隔,具体代码如下所示:

<template>
  <input @input="handleInput" placeholder="搜索">
</template>

<script>
  export default {
    props: {
      debounce: {
        type: Number,
        default: 300
      }
    },
    data() {
      return {
        timeId: null
      }
    },
    methods: {
      handleInput(event) {
        if (this.timeId) {
          clearTimeout(this.timeId)
        }
        this.timeId = setTimeout(() => {
          console.log(`发送请求:${event.target.value}`)
        }, this.debounce)
      }
    }
  }
</script>

在上面的代码中,当输入框输入内容时,就会触发handleInput方法。如果timeId不为空,则说明之前已经设置了setTimeout,需要清除之前的定时器。接着,重新设置一个定时器,在指定的时间间隔内如果没有再次输入,则发送请求。

示例二:防止按钮被多次点击

在某些业务场景中,需要处理连续点击按钮的问题,比如在网站的交易页面中提交订单时。可以封装一个函数式组件,通过throttle prop来控制节流的时间间隔,具体代码如下所示:

<template>
  <button @click="handleClick">{{ buttonText }}</button>
</template>

<script>
  export default {
    props: {
      throttle: {
        type: Number,
        default: 3000
      },
      buttonText: {
        type: String,
        default: '提交订单'
      }
    },
    data() {
      return {
        flag: true
      }
    },
    methods: {
      handleClick() {
        if (!this.flag) {
          return
        }
        this.flag = false
        setTimeout(() => {
          console.log('提交订单')
          this.flag = true
        }, this.throttle)
      }
    }
  }
</script>

在上面的代码中,当点击按钮时,就会触发handleClick方法。如果flag为false,则说明在指定的时间间隔内已经提交过订单,不再执行。如果flag为true,则可以执行提交订单,同时设置定时器,在指定的时间间隔内将flag设置为true,代表可以再次提交订单。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈VUE防抖与节流的最佳解决方案(函数式组件) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue2.x+webpack快速搭建前端项目框架详解

    Vue2.x+Webpack快速搭建前端项目框架攻略 本文介绍如何使用Vue2.x和Webpack快速搭建前端项目框架。这里提供一个完整的步骤来创建一个简单的Vue应用程序,以及一些示例来解释这些步骤。 步骤1:创建项目 首先,我们需要创建一个新项目。可以使用vue-cli来创建新项目,它将为我们处理所有必要的设置。 vue create my-projec…

    Vue 2023年5月27日
    00
  • vue关于下载文件常用的几种方式

    Vue 作为一种流行的前端框架,提供了几种下载文件的方式。本篇文章将介绍 Vue 常用的几种前端下载文件的技巧。 1. 通过a标签下载文件 a 标签是 HTML 中常用的下载文件的方式之一。Vue 在处理下载文件时,可以通过创建一个 a 标签,设置其 href 属性和 download 属性来实现文件下载。 <template> <div&…

    Vue 2023年5月28日
    00
  • 超简单的Vue.js环境搭建教程

    超简单的Vue.js环境搭建教程 1. 确认开发环境 在开始之前,需要确认本地电脑是否已经安装了 Node.js,如果没有,请下载并安装它。安装完成后,使用命令 node -v和npm -v 确认是否安装成功。 2. 安装Vue的脚手架 在Vue中我们可以使用脚手架工具vue-cli快速构建项目,首先需要使用npm安装vue-cli。在命令行中输入下面的命令…

    Vue 2023年5月28日
    00
  • Vue首评加载速度及白屏时间优化详解

    Vue首评加载速度及白屏时间优化详解 前言 在当今互联网时代,网页的首评加载速度和白屏时间已经成为了评判网站质量和用户体验的重要指标之一。Vue作为一门专为构建交互式Web界面而设计的渐进式JavaScript框架,在进行项目开发时也需要考虑如何优化首评加载速度和白屏时间。本文旨在帮助Vue开发者做到此项优化。 背景 在进行Vue项目开发时,由于文档、组件和…

    Vue 2023年5月28日
    00
  • Vue实现指令式动态追加小球动画组件的步骤

    下面是Vue实现指令式动态追加小球动画组件的步骤: 第一步:创建小球动画组件 首先,在Vue中创建一个小球动画组件(例如Ball组件),可以使用CSS3实现小球的动画效果。以下是一个简单的Ball组件示例: <template> <div class="ball-container"> <div class=…

    Vue 2023年5月28日
    00
  • vue中实现图片压缩 file文件的方法

    现在我将为你详细讲解如何在 Vue 中实现图片压缩的方法。 1. 安装插件 首先,我们需要安装一个非常有用的插件:vue-image-compress。使用此插件,可以轻松地在 Vue 中实现图片压缩功能。 可以使用npm 或 yarn进行安装: npm install vue-image-compress –save 或者 yarn add vue-im…

    Vue 2023年5月28日
    00
  • vant开发微信小程序安装以及简单使用教程

    安装 (1)首先需要安装Node.js,安装完毕后可以通过以下命令检查Node.js是否安装成功: node -v (2)然后在命令行窗口中输入以下命令,安装@vant/weapp: npm i @vant/weapp -S –production 开发 (1)将vant组件导入小程序中,在需要使用vant的页面的json文件中引入vant组件: { &q…

    Vue 2023年5月27日
    00
  • Vue项目中使用vuex详解

    Vue项目中使用vuex详解 什么是Vuex Vuex是一个专为Vue.js应用程序开发的状态管理模式。 Vuex采用集中式存储管理应用的所有组件的状态,将组件的共享状态抽取出来,以一个全局单例模式管理。 安装 在vue-cli工具生成的项目中,使用以下命令安装vuex: npm install vuex –save 状态管理 Vuex中最核心的概念就是“…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部