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

vue3中watch監(jiān)聽的四種寫法

 更新時間:2024年02月02日 08:41:22   作者:荀鼠不是鼠  
本文主要介紹了vue3中watch監(jiān)聽的四種寫法,包含了ref 定義的數據,reactive定義的數據,函數返回的值(getter函數)和前面3個內容的數組,具有一定的參考價值,感興趣的可以了了解一下

作用:監(jiān)視數據的變化(和vue2中的watch作用一致)

特點:vue3中watch只能監(jiān)視以下四種數據:

1、ref 定義的數據

2、reactive定義的數據

3、函數返回的值(getter函數)

4、前面3個內容的數組

寫法

情況一

監(jiān)視ref定義的基本數據類型:直接寫數據名即可,監(jiān)視的是value值的改變

<template>
  <div class="person">
    <h1>情況一:監(jiān)視【ref】定義的【基本類型】數據</h1>
    <h2>當前求和為:{{sum}}</h2>
    <button @click="changeSum">點我sum+1</button>
  </div>
</template>

<script lang="ts" setup name="Person">
  import {ref,watch} from 'vue'
  // 數據
  let sum = ref(0)
  // 方法
  function changeSum(){
    sum.value += 1
  }
  // 監(jiān)視,情況一:監(jiān)視【ref】定義的【基本類型】數據
  const stopWatch = watch(sum,(newValue,oldValue)=>{
    console.log('sum變化了',newValue,oldValue) //newValue是新的數據,oldvalue是舊的數據
    if(newValue >= 10){
      stopWatch()
    }
  })
</script>

情況二

監(jiān)視ref定義的【對象類型】數據:直接寫數據名,監(jiān)視的是對象的【地址值】,若想監(jiān)視對象內部的數據,要手動開啟深度監(jiān)視。

<template>
  <div class="person">
    <h1>情況二:監(jiān)視【ref】定義的【對象類型】數據</h1>
    <h2>姓名:{{ person.name }}</h2>
    <h2>年齡:{{ person.age }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年齡</button>
    <button @click="changePerson">修改整個人</button>
  </div>
</template>

<script lang="ts" setup name="Person">
  import {ref,watch} from 'vue'
  // 數據
  let person = ref({
    name:'張三',
    age:18
  })
  // 方法
  function changeName(){
    person.value.name += '~'
  }
  function changeAge(){
    person.value.age += 1
  }
  function changePerson(){
    person.value = {name:'李四',age:90}
  }
  /* 
    監(jiān)視,情況一:監(jiān)視【ref】定義的【對象類型】數據,監(jiān)視的是對象的地址值,若想監(jiān)視對象內部屬性的變化,需要手動開啟深度監(jiān)視
    watch的第一個參數是:被監(jiān)視的數據
    watch的第二個參數是:監(jiān)視的回調
    watch的第三個參數是:配置對象(deep、immediate等等.....) 
  */
  watch(person,(newValue,oldValue)=>{
    console.log('person變化了',newValue,oldValue)
  },{deep:true})
  
</script>

情況三

監(jiān)視reactive定義的【對象類型】數據,且默認開啟了深度監(jiān)視。

<template>
  <div class="person">
    <h1>情況三:監(jiān)視【reactive】定義的【對象類型】數據</h1>
    <h2>姓名:{{ person.name }}</h2>
    <h2>年齡:{{ person.age }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年齡</button>
    <button @click="changePerson">修改整個人</button>
    <hr>
    <h2>測試:{{obj.a.b.c}}</h2>
    <button @click="test">修改obj.a.b.c</button>
  </div>
</template>

<script lang="ts" setup name="Person">
  import {reactive,watch} from 'vue'
  // 數據
  let person = reactive({
    name:'張三',
    age:18
  })
  let obj = reactive({
    a:{
      b:{
        c:666
      }
    }
  })
  // 方法
  function changeName(){
    person.name += '~'
  }
  function changeAge(){
    person.age += 1
  }
  function changePerson(){
    Object.assign(person,{name:'李四',age:80})
  }
  function test(){
    obj.a.b.c = 888
  }

  // 監(jiān)視,情況三:監(jiān)視【reactive】定義的【對象類型】數據,且默認是開啟深度監(jiān)視的
  watch(person,(newValue,oldValue)=>{
    console.log('person變化了',newValue,oldValue)
  })
  watch(obj,(newValue,oldValue)=>{
    console.log('Obj變化了',newValue,oldValue)
  })
</script>

情況四

監(jiān)視ref或reactive定義的【對象類型】數據中的某個屬性,注意點如下:

  • 若該屬性值不是【對象類型】,需要寫成函數形式。

  • 若該屬性值是依然是【對象類型】,可直接編,也可寫成函數,建議寫成函數。

結論:監(jiān)視的要是對象里的屬性,那么最好寫函數式,注意點:若是對象監(jiān)視的是地址值,需要關注對象內部,需要手動開啟深度監(jiān)視。

<template>
  <div class="person">
    <h1>情況四:監(jiān)視【ref】或【reactive】定義的【對象類型】數據中的某個屬性</h1>
    <h2>姓名:{{ person.name }}</h2>
    <h2>年齡:{{ person.age }}</h2>
    <h2>汽車:{{ person.car.c1 }}、{{ person.car.c2 }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年齡</button>
    <button @click="changeC1">修改第一臺車</button>
    <button @click="changeC2">修改第二臺車</button>
    <button @click="changeCar">修改整個車</button>
  </div>
</template>

<script lang="ts" setup name="Person">
  import {reactive,watch} from 'vue'

  // 數據
  let person = reactive({
    name:'張三',
    age:18,
    car:{
      c1:'奔馳',
      c2:'寶馬'
    }
  })
  // 方法
  function changeName(){
    person.name += '~'
  }
  function changeAge(){
    person.age += 1
  }
  function changeC1(){
    person.car.c1 = '奧迪'
  }
  function changeC2(){
    person.car.c2 = '大眾'
  }
  function changeCar(){
    person.car = {c1:'雅迪',c2:'愛瑪'}
  }

  // 監(jiān)視,情況四:監(jiān)視響應式對象中的某個屬性,且該屬性是基本類型的,要寫成函數式
  /* watch(()=> person.name,(newValue,oldValue)=>{
    console.log('person.name變化了',newValue,oldValue)
  }) */

  // 監(jiān)視,情況四:監(jiān)視響應式對象中的某個屬性,且該屬性是對象類型的,可以直接寫,也能寫函數,更推薦寫函數
  watch(()=>person.car,(newValue,oldValue)=>{
    console.log('person.car變化了',newValue,oldValue)
  },{deep:true})
</script>

情況五

監(jiān)視多個數據

<template>
  <div class="person">
    <h1>情況五:監(jiān)視上述的多個數據</h1>
    <h2>姓名:{{ person.name }}</h2>
    <h2>年齡:{{ person.age }}</h2>
    <h2>汽車:{{ person.car.c1 }}、{{ person.car.c2 }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年齡</button>
    <button @click="changeC1">修改第一臺車</button>
    <button @click="changeC2">修改第二臺車</button>
    <button @click="changeCar">修改整個車</button>
  </div>
</template>

<script lang="ts" setup name="Person">
  import {reactive,watch} from 'vue'

  // 數據
  let person = reactive({
    name:'張三',
    age:18,
    car:{
      c1:'奔馳',
      c2:'寶馬'
    }
  })
  // 方法
  function changeName(){
    person.name += '~'
  }
  function changeAge(){
    person.age += 1
  }
  function changeC1(){
    person.car.c1 = '奧迪'
  }
  function changeC2(){
    person.car.c2 = '大眾'
  }
  function changeCar(){
    person.car = {c1:'雅迪',c2:'愛瑪'}
  }

  // 監(jiān)視,情況五:監(jiān)視上述的多個數據
  watch([()=>person.name,person.car],(newValue,oldValue)=>{
    console.log('person.car變化了',newValue,oldValue)
  },{deep:true})

</script>

到此這篇關于vue3中warch監(jiān)聽的幾種寫法的文章就介紹到這了,更多相關vue3 warch監(jiān)聽內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue動態(tài)生成el-checkbox點擊無法賦值的解決方法

    Vue動態(tài)生成el-checkbox點擊無法賦值的解決方法

    這篇文章主要給大家介紹了關于Vue動態(tài)生成el-checkbox點擊無法賦值的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • 使用Vue實現圖片上傳的三種方式

    使用Vue實現圖片上傳的三種方式

    在項目中經常會遇到圖片上傳功能,今天腳本之家小編給大家?guī)砹耸褂肰ue實現圖片上傳的三種方式,感興趣的朋友一起看看吧
    2018-07-07
  • 全面解析vue router 基本使用(動態(tài)路由,嵌套路由)

    全面解析vue router 基本使用(動態(tài)路由,嵌套路由)

    路由,其實就是指向的意思,當我點擊頁面上的home按鈕時,頁面中就要顯示home的內容,如果點擊頁面上的about 按鈕,頁面中就要顯示about 的內容。這篇文章主要介紹了vue router 基本使用 ,需要的朋友可以參考下
    2018-09-09
  • el-table表格點擊該行任意位置時也勾選上其前面的復選框

    el-table表格點擊該行任意位置時也勾選上其前面的復選框

    本文主要介紹了在el-table組件中實現雙擊表格某一行任意位置自動勾選復選框的功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • 詳解Vue中公共組件的封裝

    詳解Vue中公共組件的封裝

    在Vue中,組件是構建用戶界面的基本單位,封裝公共組件是一種良好的實踐,可以提高代碼的可復用性和可維護性,下面我們就來看看如何封裝一個公共的按鈕組件吧
    2023-08-08
  • Vue.js tab實現選項卡切換

    Vue.js tab實現選項卡切換

    這篇文章主要為大家詳細介紹了Vue.js組件tab實現選項卡切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 如何在Vue.JS中使用圖標組件

    如何在Vue.JS中使用圖標組件

    這篇文章主要介紹了如何在Vue.JS中使用圖標組件,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • vue中require與import的區(qū)別詳解

    vue中require與import的區(qū)別詳解

    這篇文章主要介紹了vue中require與import的區(qū)別詳解,require相當于module.exports的傳送門,module.exports后面的內容是什么,require的結果就是什么,對象、數字、字符串、函數,再把require的結果賦值給某個變量,需要的朋友可以參考下
    2023-10-10
  • vue3在jsx中使用component組件方式

    vue3在jsx中使用component組件方式

    這篇文章主要介紹了vue3在jsx中使用component組件方式,具有很好的 參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue3+vite多項目多模塊打包(基于vite-plugin-html插件)

    vue3+vite多項目多模塊打包(基于vite-plugin-html插件)

    這篇文章主要給大家介紹了關于vue3+vite基于vite-plugin-html插件實現多項目多模塊打包的相關資料,現在很多小伙伴都已經使用Vite+Vue3開發(fā)項目了,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07

最新評論