最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

1、ref 定義的數(shù)據(jù)

2、reactive定義的數(shù)據(jù)

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

4、前面3個(gè)內(nèi)容的數(shù)組

寫法

情況一

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

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

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

情況二

監(jiān)視r(shí)ef定義的【對(duì)象類型】數(shù)據(jù):直接寫數(shù)據(jù)名,監(jiān)視的是對(duì)象的【地址值】,若想監(jiān)視對(duì)象內(nèi)部的數(shù)據(jù),要手動(dòng)開啟深度監(jiān)視。

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

<script lang="ts" setup name="Person">
  import {ref,watch} from 'vue'
  // 數(shù)據(jù)
  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】定義的【對(duì)象類型】數(shù)據(jù),監(jiān)視的是對(duì)象的地址值,若想監(jiān)視對(duì)象內(nèi)部屬性的變化,需要手動(dòng)開啟深度監(jiān)視
    watch的第一個(gè)參數(shù)是:被監(jiān)視的數(shù)據(jù)
    watch的第二個(gè)參數(shù)是:監(jiān)視的回調(diào)
    watch的第三個(gè)參數(shù)是:配置對(duì)象(deep、immediate等等.....) 
  */
  watch(person,(newValue,oldValue)=>{
    console.log('person變化了',newValue,oldValue)
  },{deep:true})
  
</script>

情況三

監(jiān)視r(shí)eactive定義的【對(duì)象類型】數(shù)據(jù),且默認(rèn)開啟了深度監(jiān)視。

<template>
  <div class="person">
    <h1>情況三:監(jiān)視【reactive】定義的【對(duì)象類型】數(shù)據(jù)</h1>
    <h2>姓名:{{ person.name }}</h2>
    <h2>年齡:{{ person.age }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年齡</button>
    <button @click="changePerson">修改整個(gè)人</button>
    <hr>
    <h2>測(cè)試:{{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'
  // 數(shù)據(jù)
  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】定義的【對(duì)象類型】數(shù)據(jù),且默認(rèn)是開啟深度監(jiān)視的
  watch(person,(newValue,oldValue)=>{
    console.log('person變化了',newValue,oldValue)
  })
  watch(obj,(newValue,oldValue)=>{
    console.log('Obj變化了',newValue,oldValue)
  })
</script>

情況四

監(jiān)視r(shí)ef或reactive定義的【對(duì)象類型】數(shù)據(jù)中的某個(gè)屬性,注意點(diǎn)如下:

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

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

結(jié)論:監(jiān)視的要是對(duì)象里的屬性,那么最好寫函數(shù)式,注意點(diǎn):若是對(duì)象監(jiān)視的是地址值,需要關(guān)注對(duì)象內(nèi)部,需要手動(dòng)開啟深度監(jiān)視。

<template>
  <div class="person">
    <h1>情況四:監(jiān)視【ref】或【reactive】定義的【對(duì)象類型】數(shù)據(jù)中的某個(gè)屬性</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">修改第一臺(tái)車</button>
    <button @click="changeC2">修改第二臺(tái)車</button>
    <button @click="changeCar">修改整個(gè)車</button>
  </div>
</template>

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

  // 數(shù)據(jù)
  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)視響應(yīng)式對(duì)象中的某個(gè)屬性,且該屬性是基本類型的,要寫成函數(shù)式
  /* watch(()=> person.name,(newValue,oldValue)=>{
    console.log('person.name變化了',newValue,oldValue)
  }) */

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

情況五

監(jiān)視多個(gè)數(shù)據(jù)

<template>
  <div class="person">
    <h1>情況五:監(jiān)視上述的多個(gè)數(shù)據(jù)</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">修改第一臺(tái)車</button>
    <button @click="changeC2">修改第二臺(tái)車</button>
    <button @click="changeCar">修改整個(gè)車</button>
  </div>
</template>

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

  // 數(shù)據(jù)
  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)視上述的多個(gè)數(shù)據(jù)
  watch([()=>person.name,person.car],(newValue,oldValue)=>{
    console.log('person.car變化了',newValue,oldValue)
  },{deep:true})

</script>

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

相關(guān)文章

  • vue3實(shí)現(xiàn)markdown預(yù)覽和編輯詳解

    vue3實(shí)現(xiàn)markdown預(yù)覽和編輯詳解

    本文介紹了如何在Vue3項(xiàng)目中集成Vditor Markdown編輯器,包括Vditor的簡(jiǎn)介、安裝、預(yù)覽、編輯以及一些高級(jí)功能和常見問題解決,Vditor支持多種編輯模式、圖表、公式等,且高度可定制化
    2025-10-10
  • vuex 使用文檔小結(jié)篇

    vuex 使用文檔小結(jié)篇

    Vuex 是一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,集中式存儲(chǔ)管理應(yīng)用的所有組件狀態(tài)。本文給大家介紹了vuex使用文檔,需要的朋友參考下吧
    2018-01-01
  • Vue+Echarts實(shí)現(xiàn)分時(shí)圖和交易量圖的繪制

    Vue+Echarts實(shí)現(xiàn)分時(shí)圖和交易量圖的繪制

    近來發(fā)現(xiàn)Echarts?API越發(fā)的強(qiáng)大,對(duì)于繪制各類圖形可以使用Echarts實(shí)現(xiàn)。本文將利用Echarts實(shí)現(xiàn)分時(shí)圖和交易量圖的繪制,希望對(duì)大家有所幫助
    2023-03-03
  • 解決VUE3 keep-alive頁面切換報(bào)錯(cuò)parentComponent.ctx.deactivate

    解決VUE3 keep-alive頁面切換報(bào)錯(cuò)parentComponent.ctx.deactivate

    這篇文章主要介紹了解決VUE3 keep-alive頁面切換報(bào)錯(cuò)parentComponent.ctx.deactivate is not a function的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue3處理大數(shù)據(jù)量渲染和優(yōu)化的方法小結(jié)

    Vue3處理大數(shù)據(jù)量渲染和優(yōu)化的方法小結(jié)

    在現(xiàn)代Web應(yīng)用中,隨著用戶數(shù)據(jù)和交互的復(fù)雜性增加,如何高效地處理大數(shù)據(jù)量渲染成為了前端開發(fā)的重要環(huán)節(jié),本文將以Vue 3為例,探討如何優(yōu)化大數(shù)據(jù)量渲染,提升應(yīng)用性能,需要的朋友可以參考下
    2024-07-07
  • 15 分鐘掌握vue-next函數(shù)式api(小結(jié))

    15 分鐘掌握vue-next函數(shù)式api(小結(jié))

    這篇文章主要介紹了15 分鐘掌握vue-next函數(shù)式api(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例

    elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例

    這篇文章主要給大家介紹了關(guān)于elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用elementUI具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 一文詳解Vue中過濾器filters的使用

    一文詳解Vue中過濾器filters的使用

    Vue.js允許自定義過濾器,過濾器的作用可被用于一些常見的文本格式化(也就是修飾文本,但是文本內(nèi)容不會(huì)改變),本文主要來和大家講講過濾器filters的使用,感興趣的可以了解一下
    2023-04-04
  • 修改Vue打包后的默認(rèn)文件名操作

    修改Vue打包后的默認(rèn)文件名操作

    這篇文章主要介紹了修改Vue打包后的默認(rèn)文件名操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue 的 v-model用法實(shí)例

    Vue 的 v-model用法實(shí)例

    這篇文章主要介紹了Vue 的 v-model用法實(shí)例,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

绩溪县| 江油市| 晋江市| 大埔区| 濮阳县| 大连市| 桂阳县| 翁源县| 丽水市| 阿瓦提县| 子长县| 淳化县| 嘉峪关市| 芜湖市| 藁城市| 枣强县| 镇巴县| 广德县| 巴彦县| 广州市| 青河县| 唐河县| 北京市| 大理市| 惠安县| 南木林县| 基隆市| 新竹县| 香港 | 斗六市| 友谊县| 桦川县| 攀枝花市| 巨野县| 中江县| 十堰市| 荣成市| 泾源县| 梅河口市| 青岛市| 恭城|