vue中使用lodash和axios的好处?

Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库

浏览器环境:

<script src="lodash.js"></script>

下载步骤:

$ npm i -g npm
$ npm i --save lodash

Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。 Lodash 的模块化方法 非常适用于:

遍历 array、object 和 string
对值进行操作和检测
创建符合功能的函数

例子:
.assignIn(object, [sources])
这个方法类似
.assign, 除了它会遍历并继承来源对象的属性。

function Foo() {
  this.a = 1;
}
 
function Bar() {
  this.c = 3;
}
 
Foo.prototype.b = 2;
Bar.prototype.d = 4;
 
 console.log(_.assignIn({ 'a': 0 }, new Foo, new Bar))
// => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }

_.assign(object, [sources])
分配来源对象的可枚举属性到目标对象上。 来源对象的应用规则是从左到右,随后的下一个对象的属性会覆盖上一个对象的属性。

function Foo() {
  this.a = 1;
}
 
function Bar() {
  this.c = 3;
}
 
Foo.prototype.b = 2;
Bar.prototype.d = 4;
 console.log(_.assign({ 'a': 0 }, new Foo, new Bar))
// => { 'a': 1, 'c': 3 }

在这里插入图片描述

实操例子:
_.debounce(func, [wait=0], [options=])
创建一个 debounced(防抖动)函数,该函数会从上一次被调用后,延迟 wait 毫秒后调用 func 方法。 debounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发(注:是 先调用后等待 还是 先等待后调用)。 func 调用时会传入最后一次提供给 debounced(防抖动)函数 的参数。 后续调用的 debounced(防抖动)函数返回是最后一次 func 调用的结果。

注意: 如果 leading 和 trailing 选项为 true, 则 func 允许 trailing 方式调用的条件为: 在 wait 期间多次调用防抖方法。

如果 wait 为 0 并且 leading 为 false, func调用将被推迟到下一个点,类似setTimeout为0的超时。

小例子:

// 避免窗口在变动时出现昂贵的计算开销。
jQuery(window).on('resize', _.debounce(calculateLayout, 150));
 
// 当点击时 `sendMail` 随后就被调用。
jQuery(element).on('click', _.debounce(sendMail, 300, {
  'leading': true,
  'trailing': false
}));
 
// 确保 `batchLog` 调用1次之后,1秒内会被触发。
var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
var source = new EventSource('/stream');
jQuery(source).on('message', debounced);
 
// 取消一个 trailing 的防抖动调用
jQuery(window).on('popstate', debounced.cancel);

vue例子实操:防抖动函数

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的 watcher 。这是为什么 Vue 提供一个更通用的方法通过 watch 选项,来响应数据的变化。当你想要在数据变化响应时,执行异步操作或昂贵操作时,这是很有用的

<div id="watch-example">
  <p>
    是否是 question:
    <input v-model="question">
  </p>
  <p>{{ answer }}</p>
</div>
<script src="https://unpkg.com/axios@0.12.0/dist/axios.min.js"></script>
<script src="https://unpkg.com/lodash@4.13.1/lodash.min.js"></script>
<script>
var watchExampleVM = new Vue({
  el: '#watch-example',
  data: {
    question: '',
    answer: '除非你提出问题,否则我不能给你答案!'
  },
  watch: {
    // 如果 question 发生改变,这个函数就会运行
    question: function (newQuestion) {
      this.answer = 'Waiting for you to stop typing...'
      this.getAnswer()
    }
  },
  methods: {
    // _.debounce 是一个通过 lodash 限制操作频率的函数。
    // 在这个例子中,我们希望限制访问yesno.wtf/api的频率
    // ajax请求直到用户输入完毕才会发出
    // 学习更多关于 _.debounce function (and its cousin
    // _.throttle), 参考: https://lodash.com/docs#debounce
    getAnswer: _.debounce(//_.debounce(防抖动)函数
      function () {
        var vm = this
        if (this.question.indexOf('?') === -1) {
          vm.answer = '问题通常包含问号. ;-)'
          return
        }
        vm.answer = 'Thinking...'
        axios.get('https://yesno.wtf/api')
          .then(function (response) {
            vm.answer = _.capitalize(response.data.answer)
          })
          .catch(function (error) {
            vm.answer = 'Error! Could not reach the API. ' + error
          })
      },
      // 这是我们为用户停止输入等待的毫秒数
      500
    )
  }
})
</script>

lodash参考链接:中文版
:https://www.lodashjs.com/docs/lodash.debounce#_debouncefunc-wait0-options

vue如何使用lodash第三方插件:
1.全局使用:

npm install lodash --save
import _ from 'lodash'
Vue.prototype._ = _

使用:

this._.debounce(this.handleClick,1000,false)

2.单个组件中引入

import isArray from "lodash/isArray";
isArray([]) //true

js中使用:

npm install lodash --save

直接引入使用

<script src="lodash.js"></script>
<script>
//直接在这里调用某属性或某函数
//_.chunk类似于一个二维数组
//_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 使用 Axios 进行请求时,可以通过在 Vue 的原型设置 Axios 的实例来实现全局节流防抖。 节流和防抖的作用是为了减少请求的发送次数,提高性能。节流是在一定时间内只发送一次请求,而防抖是在最后一次操作后等待一段时间再发送请求。 以下是一个实现全局节流防抖的示例代码: ```javascript import axios from 'axios' import _ from 'lodash' // 设置全局节流时间 const THROTTLE_TIME = 1000 // 设置全局防抖时间 const DEBOUNCE_TIME = 500 // 创建 Axios 实例 const instance = axios.create({ baseURL: 'https://api.example.com', timeout: 10000 }) // 设置请求拦截器 instance.interceptors.request.use( config => { // 在请求发送前进行节流处理 config.throttleCancelToken = _.throttle(cancel => cancel(), THROTTLE_TIME) return config }, error => { return Promise.reject(error) } ) // 设置响应拦截器 instance.interceptors.response.use( response => { return response }, error => { return Promise.reject(error) } ) // 将 Axios 实例设置为 Vue 的原型 Vue.prototype.$http = instance // 在全局混入对象设置防抖函数 Vue.mixin({ methods: { debounce(fn, wait = DEBOUNCE_TIME) { let timeout = null return function(...args) { if (timeout !== null) { clearTimeout(timeout) } timeout = setTimeout(() => { fn.apply(this, args) }, wait) } } } }) ``` 在这个示例代码,首先使用 `import` 引入了 AxiosLodash 库。然后创建了一个 Axios 实例,并设置了全局节流时间和全局防抖时间。接下来,在请求拦截器使用 `throttle` 函数对取消请求函数进行节流处理,以减少请求发送的次数。最后,将 Axios 实例设置为 Vue 的原型,以便在组件使用。 除此之外,在全局混入对象还设置了一个 `debounce` 函数,用于在组件进行防抖处理。这个函数接收一个函数和一个等待时间作为参数,返回一个新的函数,在等待时间内多次调用该函数时,只会执行最后一次调用,并在等待时间结束后执行一次。 这样,在组件使用 Axios 进行请求时,可以通过调用 `$http` 对象来发送请求,并使用 `debounce` 函数对请求进行防抖处理,以提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值