项目经验 | Vue搜索框 + debounce防抖

<el-input v-model="keywords"/>
import { $public, $formTools } from '@/helper'
export default {
  data() {
    return {
      keywords: ''
    }
  },
  watch: {
    keywords () {
      this.debouncedSearch()
    }
  },
  created () {
    this.debouncedSearch = $public._debounce(this.fetchPage)
  },
  methods: {
    fetchPage (page = 1) {
      let optionsObj = { limit: 10, offset: (page - 1) * 10 }
      if (this.keywords.length > 0) optionsObj['search'] = this.keywords
      let options = this.$formTools.getOptions('get', optionsObj)
      this.$apis.manageGetProblemList(options).then(res => {
        this.result = res.result
      })
    }
  }
}

小项目不想引入lodash,所以是手写的debounce和throttle

export default {
  _debounce (fn, delay) {
    delay = delay || 600
    let timer
    return function () {
      let ctx = this
      let args = arguments
      if (timer) {
        clearTimeout(timer)
      }
      timer = setTimeout(() => {
        timer = null
        fn.apply(ctx, args)
      }, delay)
    }
  },
  _throttle (fn, interval) {
    let last
    let timer
    interval = interval || 600
    return function () {
      let ctx = this
      let args = arguments
      let now = new Date()
      if (last && now - last < interval) {
        clearTimeout(timer)
        timer = setTimeout(function () {
          last = now
          fn.apply(ctx, args)
        }, interval)
      } else {
        last = now
        fn.apply(ctx, args)
      }
    }
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 最近和前端的小伙伴们,在讨论面试题的时候。谈到了函数防抖和函数节流的应用场景和原理。于是,想深入研究一下两者...
    youthcity阅读 23,752评论 5 78
  • 问题的引出 在一些场景往往由于事件频繁被触发,因而频繁地进行DOM操作、资源加载,导致UI停顿甚至浏览器崩溃。在这...
    Mica_马超阅读 6,800评论 0 2
  • 雅虎军规 首先,我们先来看看“雅虎军规”的35条: 尽量减少 HTTP 请求个数——须权衡 使用CDN(内容分发网...
    Amy_39de阅读 4,174评论 0 0
  • 长久以来,面向对象在 JavaScript 编程范式中占据着主导地位。不过,最近人们对函数式编程的兴趣正在增长。函...
    神刀阅读 3,418评论 0 0
  • 我们看一段react代码 这是我在ant-design-pro源码看到的,功能是最简单常用的监听resize事件,...
    Evan_zhan阅读 13,219评论 0 6

友情链接更多精彩内容