日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue組件中節流函數的失效的原因和解決方法

瀏覽:327日期:2022-10-22 10:58:33

今天使用節流函數的時候遇見了一個問題,搞了半天才找到原因,所以在這里做個總結。

節流函數

瀏覽器的一些事件,如:resize,scroll,mousemove等。這些事件觸發頻率太過頻繁,綁定在這些事件上的回調函數會不停的被調用,加重瀏覽器的負擔,導致用戶體驗非常糟糕。所以先賢們發明了節流函數,簡單版本如下:

function throttle (f, wait = 200) { let last = 0 return function (...args) { let now = Date.now() if (now - last > wait) { last = now f.apply(this, args) } }}

假設有一個 vue 組件 svgMark。這個組件中渲染的元素要在頁面窗口大小發生變化時重繪 reDraw ,而重繪時要使用節流函數防止性能損耗。正常情況下代碼如下:

<template> <div>{{ index }}</div></template><script>import { throttle } from ’lodash’export default { name: ’SvgMark’, data() { return { index: 0 } }, mounted() { window.addEventListener(’resize’, this.reDraw) }, beforeDestroy() { window.removeEventListener(’resize’, this.reDraw) }, methods: { reDraw: throttle(function() { this.index++ }, 500) }}</script></script>

一般情況下這樣用沒什么問題。但是有這樣一個場景,使用節流函數時卻失效了,即當這個組件被 v-for 循環加載了很多次:

<template> <div> <svgMark v-for='item in 10' :key='item.id' /> </div></template>

這個時候無論渲染了多少個 svgMark 組件,在窗口大小改變的時候卻只觸發了第一個組件和第 n 割組件的重繪,為什么其他組件沒有觸發呢?這就要從頭說起了。

節流函數

節流函數在初始化的時候產生了一個閉包,閉包內保存了變量 last ,這個 last 記錄了上一次執行 f 函數的時間。而當下一次觸發節流函數的時候,如果此時時間 now 減去上次時間 last 小于了我們規定的節流時間 wait ,那么函數 f 將不會執行。

很顯然,第一個子組件在觸發節流函數的時候產生了一個 last,而第二個組件在觸發節流函數時候的時產生的 now 并沒有滿足 now - last > wait 的條件,所以沒有執行重繪代碼。而到了第 n 個組件觸發節流函數的時候,滿足了 now - last > wait 的條件所以重繪成功了。

vue 組件

vue 組件在代碼編譯的階段,組件 svgMark 中的方法 reDraw: throttle(function() { this.index++ }, 500) 就已經被編譯成了類似如下函數:

reDraw: ƒ (...args) { let now = Date.now() if (now - last > wait) { last = now f.apply(this, args) }}

由于函數是引用類型,所有使用子組件 svgMark 的 methods 中的 reDraw 都指向了同一個內存地址,也就是說所有子組件的 reDraw 方法都是同一個函數。

因為所有組件都公用了同一個節流函數,當然就會產生節流了。那怎么解決問題呢?對癥下藥就要讓每個組件產生自己的節流函數,而不產生共用。代碼如下

子組件:

<template> <div>{{ index }}</div></template><script>import { throttle } from ’lodash’export default { name: ’SvgMark’, data() { return { index: 0 } }, mounted() { this.reDraw = throttle(() => { this.index++ }, 500) window.addEventListener(’resize’, this.reDraw) }, beforeDestroy() { window.removeEventListener(’resize’, this.reDraw) }}</script>

我們在 mounted 聲明周期函數中手動聲明了 reDraw 函數替代 methods 中的 reDraw ,這樣在每個組件初始化的時候都會產生一個自己的節流函數了。需要注意此時節流函數的參數使用了箭頭函數,因為這樣 this 才會指向組件實例。

以上就是節流函數帶給我的坑,現在分享給大家。[下班][鼓掌]

以上就是vue組件中節流函數的失效和解決方法的詳細內容,更多關于vue 組件節流函數的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线日韩欧美| 欧美日韩日本国产亚洲在线| 综合国产精品| 蜜桃一区二区三区在线观看| 香蕉成人久久| 人人精品人人爱| 黄色aa久久| 精品国产91| 青青草精品视频| 久久99久久久精品欧美| 国产精品视频一区视频二区| 欧美国产极品| 激情久久99| 免费在线亚洲| 欧美韩日一区| 久久国产亚洲精品| 一区在线视频观看| 亚洲精品影视| 国产精品亚洲欧美日韩一区在线| 国产精品久久久久毛片大屁完整版| 国产欧美大片| yellow在线观看网址| 丝袜av一区| 夜夜嗨一区二区三区| 中国女人久久久| 亚州精品视频| 国产美女久久| 久久精品资源| 国产91在线播放精品| 蜜桃av在线播放| 国产色综合网| 日韩精品三区四区| 久久中文字幕导航| 四虎4545www国产精品 | 深夜视频一区二区| 亚洲欧美日韩一区在线观看| 在线精品一区二区| 老司机精品视频网| 亚洲精品国产偷自在线观看| 男女性色大片免费观看一区二区| 欧美日韩午夜电影网| 日韩综合一区| 性一交一乱一区二区洋洋av| 国产欧美欧美| 欧美成人精品三级网站| 蜜臀av国产精品久久久久| 麻豆国产精品视频| 国产女优一区| 麻豆国产欧美一区二区三区| 久久蜜桃av| 欧美一区二区三区久久精品| 美女av在线免费看| 中文一区一区三区免费在线观| 国产精品第一| 亚洲成人精选| 国产精品hd| 国产精品日韩久久久| 国产精品密蕾丝视频下载| 99热国内精品| 国产精品videossex久久发布| 国产精品av一区二区| 欧美日韩一区二区国产| 婷婷成人综合| 精品一区二区三区中文字幕视频| 在线亚洲观看| 色一区二区三区四区| 亚洲伊人精品酒店| 日韩精品不卡一区二区| 7m精品国产导航在线| 红桃视频国产一区| 国产精品videossex| 国产suv精品一区| 日韩精品a在线观看91| 免费国产亚洲视频| 日韩欧美一区二区三区免费看| 亚洲午夜国产成人| 成人日韩在线| 国产亚洲久久| 香蕉成人久久| 午夜精品成人av| 国产精品调教| 亚洲黄色在线| 久久久久久色 | 三级欧美韩日大片在线看| 都市激情国产精品| 久久激五月天综合精品| 亚洲欧洲另类| 亚洲精选91| 免费黄色成人| 91欧美在线| 国产精品巨作av| 亚洲精品美女91| 日韩网站在线| 欧美日韩在线观看视频小说| 福利视频一区| 麻豆91精品91久久久的内涵| 在线精品一区二区| 日韩av一二三| 国产毛片久久| 视频一区二区三区中文字幕| av在线日韩| 国产精品蜜芽在线观看| 69堂免费精品视频在线播放| 在线看片日韩| 黄色免费成人| 免费国产自久久久久三四区久久 | 影院欧美亚洲| 中文字幕系列一区| 日韩成人精品一区| 免费视频一区二区三区在线观看| 视频一区日韩精品| 乱人伦精品视频在线观看| 国产一区亚洲| 色爱av综合网| 日韩免费在线| 欧洲亚洲一区二区三区| 日韩国产激情| 日韩精品首页| www.com.cn成人| 亚洲性色av| 婷婷激情一区| 91精品国产自产观看在线| 一区二区三区国产盗摄| 久久中文视频| 欧美另类综合| 蜜臀av性久久久久蜜臀aⅴ流畅| 蜜桃视频第一区免费观看| 欧美日韩中文| 日韩av福利| 亚洲一二av| 亚洲91久久| 亚洲天堂免费| 日韩精品导航| 天堂成人免费av电影一区| 999在线观看精品免费不卡网站| 女人天堂亚洲aⅴ在线观看| 亚洲黄页一区| 免费人成黄页网站在线一区二区 | 好看的亚洲午夜视频在线| 国产日韩综合| 亚洲精品护士| 日韩和欧美的一区| 国产美女精品视频免费播放软件| 国产精品久久久久久久久久久久久久久 | 亚洲青青久久| 日本午夜精品视频在线观看| 国产亚洲久久| 精品伊人久久| 视频福利一区| 西西人体一区二区| 欧美日韩一区二区国产| 免费在线亚洲| 99久久视频| 在线看片日韩| 欧美国产三级| 日韩久久一区二区三区| 久久一区二区三区电影| 久久国产精品毛片| 久久国产生活片100| 精品中文字幕一区二区三区| 欧美sm一区| 好看的av在线不卡观看| 免费在线成人网| 国产精品毛片| 啪啪国产精品| 88久久精品| 日韩欧美中文在线观看| 性一交一乱一区二区洋洋av| 中文字幕在线免费观看视频| 国产精品久av福利在线观看| 亚洲欧美日韩国产综合精品二区| 麻豆一区二区在线| 综合激情婷婷| 播放一区二区| 日韩精品一二三区| 免费在线成人| 免费不卡中文字幕在线| 亚欧成人精品| 国产成人精品一区二区三区视频| 亚洲高清二区| 欧美视频久久| 99久久婷婷| 欧美中文一区| 少妇久久久久| 日韩二区在线观看| 肉色欧美久久久久久久免费看| 伊人久久大香线蕉av超碰演员| 91精品国产自产观看在线| 久久久久网站| 国产一区2区| 综合一区在线| 成人午夜精品| 91精品国产自产观看在线| 欧美色图一区| 国产精品99久久免费| 黄色日韩在线| 欧美国产小视频| 欧美综合社区国产| 欧美女激情福利| 日韩av片子|