Loadsh 常用方法总结以及在vue中使用Loadsh

Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。处理复杂数组,对比等可以直接采用该库,也方便快捷。

官方网站

https://www.lodashjs.com/

一. 在vue中使用Loadsh中的节流函数 debounce和throttle

.throttle是lodash中的节流函数,.debounce是lodash中的防抖函数。

具体作用可以直接看官方文档。

在vue中具体怎么用

import _ from 'lodash'
export default{
methods:{
click:_.throttle(function(){
console.log('test')
console.log(this)
},1000)
}
}
import _ from 'lodash'
export default{
methods:{
onUpdateNote: _.debounce(function() {
this.updateNote({ noteId: this.curNote.id, title: this.curNote.title, content: this.curNote.content })
.then(data => {
this.statusText = '已保存'
}).catch(data => {
this.statusText = '保存出错'
})
}, 300)
}

在lodash的throttle,debounce方法中,可以直接使用function,而且无需重新指向this,在函数内部中已经做了apply,所以这里的this指向的就是vue实例,对已有函数的外面包一层.throttle/.debounce就可以了。

二.另外一种方法在vue中使用debounce和throttle

1、安装

cnpm i lodash -S

2、方法一 全局使用

  • 引入
import _ from 'lodash'
Vue.prototype._ = _
  • 使用
this._.debounce(this.handleClick,1000,false)

3、方法二 局部使用

  • 引入
let _ = require('lodash')
  • 使用
_.debounce(this.handleClick,1000,false)

4、vue单文件组件中使用

里面分别有我自己写的debounce函数和lodash的debounce函数,效果一样!

<template>
<div>
<el-button @click="myDebounce">我的debounce</el-button>
<el-button @click="_debounce">lodash的debounce</el-button>
</div>
</template> <script>
import { debounce } from '@/utils/util'
let _ = require('lodash')
export default {
methods: {
handleClick1() {
console.log(`真正执行的函数,次数比较少:handleClick1.....`)
},
handleClick2() {
console.log(`真正执行的函数,次数比较少:handleClick2.....`)
},
myDebounce() {
console.log(`myDebounce.....`)
this.DB()
},
_debounce() {
console.log(`_debounce.....`)
this._DB()
}
},
created() {
this.DB = debounce(this.handleClick1, 1000, false)
this._DB = this._.debounce(this.handleClick2,1000,false)
}
}
</script>

注意:以前我是在data选项里面定义,然后再methods里面初始化函数,但是需要判断‘如果有了就不赋函数,如果为空就赋’,发现比较麻烦;后来直接在created钩子里面定义,就很方便了!或者挂载之后。

三. Loadsh学习笔记

有多年开发经验的工程师,往往都会有自己的一套工具库,称为utils、helpers等等,这套库一方面是自己的技术积累,另一方面也是对某项技术的扩展,领先于技术规范的制订和实现。

Lodash就是这样的一套工具库,它内部封装了诸多对字符串、数组、对象等常见数据类型的处理函数,其中部分是目前ECMAScript尚未制订的规范,但同时被业界所认可的辅助函数。莫倩每天使用npm安装Lodash的数量在百万级以上,这在一定程度上证明了其代码的健壮性,值得我们在项目中一试。

模块组成

Lodash听得辅助函数主要分为以下几类,函数列表和用法实力请查看Lodash的官方文档:

  • Array, 适合于数组类型,比如填充数据、查找元素、数组分片等操作
  • Collocation, 适用于数组和对象类型,部分适用于字符串,比如分组、查找、过滤等操作
  • Function, 适用于函数类型,比如节流、延迟、缓存、设置钩子等操作
  • Lang, 普遍适用于各种类型,常用于执行类型判断和类型转换
  • Math, 使用与数值类型,常用于执行数学运算
  • Number, 适用于生成随机数,比较数值与数值区间的关系
  • Object, 适用于对象类型,常用于对象的创建、扩展、类型转换、检索、集合等操作
  • Seq, 常用于创建链式调用,提高执行性能(惰性计算)
  • String, 适用于字符串类型
  • lodash/fp 模块提供了更接近函数式编程的开发方法,其内部的函数经过包装,具有immutable、auto-curried、iteratee-first、data-last(官方介绍)等特点。
  • Fixed Arity,固化参数个数,便于柯里化
  • Rearragned Arguments, 重新调整参数位置,便于函数之间的聚合
  • Capped Iteratee Argument, 封装Iteratee参数

在React + Webpack + Babel(ES6)的开发环境中,使用Lodash需要安装插件babel-plugin-lodash并更新Babel配置文件:

npm install --save lodash
npm install --save-dev babel-plugin-lodash

更新Bable的配置文件 .babelrc:

[](javascript:void(0)

Loadsh 常用方法总结以及在vue中使用Loadsh的更多相关文章

  1. vue中如何不通过路由直接获取url中的参数

    前言:为什么要不通过路由直接获取url中的参数? vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接 ...

  2. vue中的重要特性

    一.vue中的自定义组件 html的代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  3. Vue中comoputed中的数据绑定

    Vue中的数据实现响应式绑定是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集依赖项,当数据发生变化时在set中通过调用dep. ...

  4. vue中使用stompjs实现mqtt消息推送通知

    最近在研究vue+webAPI进行前后端分离,在一些如前端定时循环请求后台接口判断状态等应用场景用使用mqtt进行主动的消息推送能够很大程度的减小服务端接口的压力,提高系统的效率,而且可以利用mqtt ...

  5. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

  6. vue中watched属性

    watched属性,vue中的观察属性,可用来监听一个值的变化 默认有两个参数,新值,旧值 data (){ return { currentCity: "深圳" } } watc ...

  7. 七、vue中v-for有时候对页面不会重新渲染,数组变化后如何到渲染页面

      v-for不能进行双向数据绑定,页面渲染完成后,再次更改v-for遍历的数据,js里面打印的数据看到数据值已经更改,但是页面的数据就是没有渲染,这是为什么呢? vue中v-for和angularj ...

  8. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  9. vue中数据双向绑定的实现原理

    vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下. 首先大致学习了解下Object.defineProperty()这个东东吧! * Objec ...

随机推荐

  1. Shiro RememberMe 1.2.4 反序列化漏洞复现

    目录 原理解释 环境搭建 复现过程 原理解释   Apache Shiro是一个Java安全框架,执行身份验证.授权.密码和会话管理.   shiro默认使用了CookieRememberMeMana ...

  2. 商学院教授点评亚马逊、苹果、Facebook和谷歌的商业策略:3星|《互联网四大:亚马逊、苹果、脸书和谷歌的隐藏基因》

    “ 谷歌依靠时报的内容吸引了数十亿点击量,而时报使用它们的搜索算法来引入流量.但是两者中显然谷歌拥有更大的权力.它如同地主一样统治着互联网的一个关键领域,而时报就相当于那块草地上的佃农.我们的结局从一 ...

  3. 重写jquery ajax 方法

    方法一 // TODO 主要功能为重写ajax $.ajaxSetup({ cache: false, headers: { "xxxxx": "xxxxx" ...

  4. bert剪枝系列——Are Sixteen Heads Really Better than One?

    1,概述 剪枝可以分为两种:一种是无序的剪枝,比如将权重中一些值置为0,这种也称为稀疏化,在实际的应用上这种剪枝基本没有意义,因为它只能压缩模型的大小,但很多时候做不到模型推断加速,而在当今的移动设备 ...

  5. JS高阶---为什么说JS是单线程执行的???

    大纲: [主体] (1)如何证明JS运行是单线程的? 上述代码执行顺序结果为:fn()→timeout →timeout 接下来对上述代码做下修改 执行结果如右图所示 接下来点击确认,关闭弹框,再往后 ...

  6. 201871010107-公海瑜《面向对象程序设计(java)》第十二周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第十二周学习总结              项目                                内容     ...

  7. UiPath:Split(","c)以逗号区分遍历字符串数组

    学习中遇到同一用户多种职业的情况,因为所有的数据都是从Excel里面取的,所以只能把所有的职业写在一个单元格里,以逗号区分. 那么就需要先把字符串转为数组,然后遍历数组去添加职位.如图 Split(& ...

  8. 通过DatagramSocket实现UDP编程(十三)

    原文链接:https://www.cnblogs.com/hysum/p/7533149.html UDP通信: UDP协议(用户数据报协议)是无连接.不可靠.无序的. UDP协议以数据报作为数据传输 ...

  9. CF1193A Amusement Park

    洛谷 CF1193A Amusement Park 洛谷传送门 题目翻译 有一个游乐场有一个好玩的项目:一些有向滑梯可以将游客从一个景点快速.刺激地传送到另一个景点.现在,你要帮游乐场老板来规划一个造 ...

  10. LG2053/BZOJ1070 「SCOI2007」修车 费用流

    问题描述 LG2053 BZOJ1070 题解 将\(m\)个修理工拆为\(n \times m\)个,将修理工和车辆看做二分图,连出一个完全二分图. 边流量为\(1\),费用为时间,费用流即可. \ ...