日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue:触发视图更新的hack

發布時間:2024/4/14 vue 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue:触发视图更新的hack 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

觸發視圖更新的hack,hack的是什么?hack那些數據改變卻沒有被vue檢測到的更新!那么vue有哪些情況是檢測不到數據的變動的? 官方說明的有下面兩大類:

  • 數組
  • 使用下標更新數組元素;
  • 使用賦值方式改變數組長度;
  • 使用下標增刪數組元素;
    • 對象
  • 對象的增刪
    • 其他
  • 比如props到子組件的原始屬性 …… 具體看另外一篇文章: [傳送門: Vue:不能檢測到Object/Array更新的情況]
  • 正文

    那么要怎么hack?!

    原理也很簡單~

    既然vue檢測不到數據的變化,那么就強制觸發vue去更新!但是vue并沒有提供這樣的接口(我是說統一的接口,不是官方提供的解決方案),如果有提供就不叫hack了對吧!

    是這樣的:對于每次vue可以檢測到的數據變動,vue都會重新去渲染整個視圖上的變動,整個,注意是整個,并不是說,data里面那個對象或列表的數據變動了,就僅僅更新對應的視圖區域,不是這樣的,是整個,ok!所以可以利用這一點!

    具體的做法就是: 在修改vue檢測不到的數據后,再變動一下vue可以檢測到的數據,比如更新一下一個隨機數

    實踐

    <div id="app" v-cloak :data-counter="counter"><dl><span v-for="(item, index) in arrs">{{ index === 0 ? '' : ', ' }}{{ item }}</span></dl><dl v-for="(item, key) in items">{{key}}: {{item}}</dl><button @click="operate('add')">add</button><button @click="operate('delete')">delete</button><button @click="operate('update')">update</button><button @click="operate('updateArrs')">update arrs</button> </div> 復制代碼new Vue({el: '#app',data: {useCounter: true,counter: 0,arrs: [0, 1, 2, 3, 4],items: {name: 'isaac',position: 'coder'}},watch: {items: {deep: true,handler(val, oldVal) {console.log({ val, oldVal });}}},methods: {env(callback) {callback && callback();this.useCounter && this.counter++;},operate(order) {if(order === 'add') {this.env(() => {this.items.goodAt = 'javascript';});} else if(order === 'delete') {this.env(() => {delete this.items.goodAt;});} else if(order === 'update'){this.items.name = Math.random();} else if(order === 'updateArrs') {this.env(() => {this.arrs[0] = Math.round(Math.random() * 100);});}}} });

    正如前言中說的幾種情況,都會在之后更新一個data.counter,而data.counter則是可以檢測被檢測到的!

    缺點

    雖然這樣hack確實出發了視圖的更新,但是有個缺點:

    • 對應的watch是檢測不到數據的變動!

    所以說,最好還是使用官方提供的解決方案!

    最后說一句

    上面的hack是我在實踐中發現的,應該在說debug的時候!因為自己清洗知道數組和對象那些情況下是觸發不到視圖更新的,但是某次卻神奇地更新了視圖!然后就開始慢慢地測試~



    原文發布時間為:2018年06月25日
    原文作者:issaxite
    本文來源:?掘金?如需轉載請聯系原作者




    總結

    以上是生活随笔為你收集整理的Vue:触发视图更新的hack的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。