欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中watch、computed、updated三者的區(qū)別及用法

 更新時間:2020年07月27日 10:37:31   作者:lxzcaicai  
這篇文章主要介紹了Vue中watch、computed、updated三者的區(qū)別及用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1、watch

理解: 監(jiān)聽器,監(jiān)聽某個數(shù)據(jù)的變化從而來執(zhí)行一些操作,當data里面的數(shù)據(jù)發(fā)生變化的時候來執(zhí)行一下開銷較大或異步的操作

1、監(jiān)聽值類型(簡單類型)數(shù)據(jù)

//在一個vue實例中
  new Vue({
    el:"#myApp",
    data:{
      num1:1,
      num2:2
    },
    methods:{},
    watch:{
     //這里兩個屬性,第一個值是變化后最新的值,第二個是變化前
      num1(after,before){
        this.num2 = after +1
      }
      immediate:true  //頁面首次加載的時候做一次監(jiān)聽。
     //這里的意思就是,監(jiān)聽num1的變化,當num1的數(shù)據(jù)發(fā)生變化的時候,來操作num2的值
    }
  })

2、監(jiān)聽引用(復雜)類型的數(shù)據(jù)

 new Vue({
    el:"#myApp",
    data:{
      obj:{
        userName:"caicai"
      }
    },
    watch:{
      obj:{
        handler(newValue,oldValue){
          // handler函數(shù)是當你的obj發(fā)生變化的時候你要做什么          
         console.log(newValue.userName,oldValue.userName);
        },
        deep:true //是否深度偵聽,true開啟,false關(guān)閉,默認false
        //加了deep之后相當于在對象obj每一層的屬性都加上了handler偵聽器。否則的話偵聽到的只是引用地址,不會執(zhí)行handler函數(shù)
      }
    }
  });

2、computed

理解: 計算屬性,顧名思義就是通過某個屬性(數(shù)據(jù))來計算得到某個屬性,這個重點在于計算,我們希望的是拿到data數(shù)據(jù)后處理一下,得到計算的結(jié)果。

在原vue中的template模板,作者初衷只是進行一些簡單的運算,那么比較復雜的計算就可用computed來進行操作

  <div id="myApp">
    <input type="text" v-model="str">
  1、第一種操作,寫在模板里,導致模板過重,難于維護
    <p>{{str.split("").reverse().join("")}}</p> 
  2、第二種,使用一個方法來調(diào)用,若多處使用,就執(zhí)行多次,降低運行速度,性能減少
    <p>{{fn(str)}}</p>
  3、第三種,使用過濾器,具有緩存,只要str不發(fā)生變化,就不會再次進行運算
    <p>{{reverseStr}}</p>
  </div>
<script type="text/javascript">
new Vue({
  el:"#myApp",
  data:{
    str:"abcd"
  },
  methods:{
    fn(v){
     //若多出調(diào)用,就執(zhí)行多次
     return v.split("").reverse().join("")//炸開--反轉(zhuǎn)--組合
    }
  },
  computed:{
    reverseStr(){
     //str不發(fā)生變化的話,我只執(zhí)行一次,具有緩存
      return this.str.split("").reverse().join("")
    }
  }
})
</script>

到這里我先略微總結(jié)一下這兩者的區(qū)別,以及使用場景

computed:

1、監(jiān)控自己定義的變量,不用再data里面聲明,函數(shù)名就是變量名

2、適合多個變量或?qū)ο筮M行處理后返回一個值(結(jié)果)。若這多個變量發(fā)生只要有一個發(fā)生變化,結(jié)果都會變化。

3、計算的結(jié)果具有緩存,依賴響應式屬性變化,響應式屬性沒有變化,直接從緩存中讀取結(jié)果。

4、在內(nèi)部函數(shù)調(diào)用的時候不用加()。

5、必須用return返回

6、不要在computed 中對data中的數(shù)據(jù)進行賦值操作,這會形成一個死循環(huán)。

watch:

1、watch 函數(shù)是不需要調(diào)用的。

2、重點在于監(jiān)控,監(jiān)控數(shù)據(jù)發(fā)生變化的時候,執(zhí)行回調(diào)函數(shù)操作。

3、當我們需要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作時,應該使用 watch

4、函數(shù)名就是你要監(jiān)聽的數(shù)據(jù)名字

使用場景:

computed:

1、一個需要的結(jié)果受多個數(shù)據(jù)影響的時候,比如購物車結(jié)算金額(受到很多處的價格結(jié)算)。

2、操作某個屬性,執(zhí)行一些復雜的邏輯,并在多處使用這個結(jié)果。

3、內(nèi)部函數(shù)中多處要使用到這個結(jié)果的。

watch :

1、監(jiān)控一些input框值的特殊處理,適合一個數(shù)據(jù)影響多個數(shù)據(jù)。

2、數(shù)據(jù)變化時,執(zhí)行一些異步操作,或開銷比較大的操作

3、updated

理解: 是vue生命周期里面的一個鉤子函數(shù)—data數(shù)據(jù)更新后觸發(fā)視圖更新。這里是視圖更新之后的操作可以在這里執(zhí)行。

觸發(fā)條件:

1、當data中定義的數(shù)據(jù)有變化時就會加載updated方法。

2、任何數(shù)據(jù)的更新,如果要做統(tǒng)一的業(yè)務(wù)邏輯處理

3、在大多數(shù)情況下,此期間避免更改狀態(tài),因為這可能會導致更新無限循環(huán)。該鉤子在服務(wù)器端渲染期間不被調(diào)用。

特點:

1.執(zhí)行到它的時候時候是數(shù)據(jù)發(fā)生變化且界面更新完畢

2.不能監(jiān)聽到路由數(shù)據(jù)(例如網(wǎng)址中的參數(shù))

3.所有的數(shù)據(jù)發(fā)生變化都會調(diào)用(消耗性能)

4.只要數(shù)據(jù)發(fā)生變化,每次觸發(fā)的代碼都是同一個

補充知識:vue中渲染數(shù)據(jù)可能有一個無限更新循環(huán)--You may have an infinite update loop in a component render function.

今天在在工作中碰到個問題,在此記錄下。

今天在接接口數(shù)據(jù)時發(fā)現(xiàn)數(shù)據(jù)搞反了,于是想著把數(shù)據(jù)倒敘一下

<row-list 
 v-if="dataList.rules" 
 :canSelect="!isClose" 
 :dataList="dataList.rules[0].subLotteryRule[0].subLotteryRule.reverse()" 
 @selectRow="selectRow"></row-list>

結(jié)果報了個錯

找了好久發(fā)現(xiàn)問題就在于reverse()這個方法

vue的響應式原理中對于數(shù)組的更新檢測包含了一組觀察數(shù)組的編譯方法

push()

pop()

shift()

unshift()

splice()

sort()

reverse()

而我在呈現(xiàn)的數(shù)據(jù)中調(diào)用了reverse()這個方法,這樣就會導致無限的更新循環(huán)。

解決辦法也很簡單,可以在vue實例的數(shù)據(jù)對象賦值之前調(diào)用reverse()就可以了

以上這篇Vue中watch、computed、updated三者的區(qū)別及用法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • VUE 更好的 ajax 上傳處理 axios.js實現(xiàn)代碼

    VUE 更好的 ajax 上傳處理 axios.js實現(xiàn)代碼

    本篇文章主要介紹了VUE 更好的 ajax 上傳處理 axios.js實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Vue使用swiper問題(5.2.0版本,避免踩坑)

    Vue使用swiper問題(5.2.0版本,避免踩坑)

    這篇文章主要介紹了Vue使用swiper問題(5.2.0版本,避免踩坑),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 基于Vue的延遲加載插件vue-view-lazy

    基于Vue的延遲加載插件vue-view-lazy

    這篇文章主要介紹了基于Vue的延遲加載插件vue-view-lazy,可以使圖片或者其他資源進入可視區(qū)域后加載,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • vue-lazyload圖片延遲加載插件的實例講解

    vue-lazyload圖片延遲加載插件的實例講解

    下面小編就為大家分享一篇vue-lazyload圖片延遲加載插件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue.js tab實現(xiàn)選項卡切換

    Vue.js tab實現(xiàn)選項卡切換

    這篇文章主要為大家詳細介紹了Vue.js組件tab實現(xiàn)選項卡切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Vuex中五個屬性以及使用方法詳解

    Vuex中五個屬性以及使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Vuex中五個屬性以及使用的相關(guān)資料,Vuex是一個專為Vue.js應用程序開發(fā)的狀態(tài)管理模式,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • 淺談Vue使用Cascader級聯(lián)選擇器數(shù)據(jù)回顯中的坑

    淺談Vue使用Cascader級聯(lián)選擇器數(shù)據(jù)回顯中的坑

    這篇文章主要介紹了淺談Vue使用Cascader級聯(lián)選擇器數(shù)據(jù)回顯中的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 基于Vuejs實現(xiàn)購物車功能

    基于Vuejs實現(xiàn)購物車功能

    這篇文章主要為大家詳細介紹了基于Vuejs實現(xiàn)購物車功能的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • vue三元運算之多重條件判斷方式(多個枚舉值轉(zhuǎn)譯)

    vue三元運算之多重條件判斷方式(多個枚舉值轉(zhuǎn)譯)

    這篇文章主要介紹了vue三元運算之多重條件判斷方式(多個枚舉值轉(zhuǎn)譯),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件)

    Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件)

    這篇文章主要介紹了Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12

最新評論