亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue3中的watch如何使用

發布時間:2023-05-12 10:02:47 來源:億速云 閱讀:129 作者:iii 欄目:編程語言

這篇文章主要介紹“Vue3中的watch如何使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Vue3中的watch如何使用”文章能幫助大家解決問題。

    一、watch的基本實例

    <template>
      <div>
        <div>{{ count }}</div>
        <button @click="changCount">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import {ref,reactive, watch} from 'vue'
    const count = ref(0)
    function changCount(){
      count.value++
    }
    watch(count,(newValue,oldValue)=>{
      if(newValue){
        console.log(`我偵聽到了count狀態的變化,當前值為${newValue},從而處理相關邏輯`);
      }
    })
    </script>
     
    <style>
     
    </style>

    二、watch監聽多個數據

    getter 函數:
    <template>
      <div>
        <div>{{ x }}</div>
        <button @click="changCount">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import { ref, reactive, watch } from "vue";
    const x = ref(1);
    const y = ref(5);
    function changCount() {
      x.value++;
    }
    watch(
      () => x.value + y.value,
      (sum) => {
        console.log(`我是x與y之和${sum}`);
      }
    );
    </script>
     
    <style>
    </style>
    多個來源組成的數組
    <template>
      <div>
        <div>{{ x }}</div>
        <button @click="changCount">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import { ref, reactive, watch } from "vue";
    const x = ref(1);
    const y = ref(5);
    function changCount() {
      x.value++;
    }
    watch(
      [x,y],
      ([x,y]) => {
        console.log(`我是x=>${x},我是y=》${y}`);
      }
    );
    </script>
     
    <style>
    </style>

    三、watch監聽對象的值

    <template>
      <div>
        <div>{{ obj.name }}</div>
        <button @click="changObj">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import { ref, reactive, watch } from "vue";
    const obj = ref({name:'你好'})
    function changObj(){
      obj.value.name+='我不好'
    }
    watch(()=>obj.value.name,(name)=>{
      console.log(name);
    })
    </script>
     
    <style>
    </style>

    四、watch監聽器的配置參數

    1.deep

    用于開啟深度監聽

    <template>
      <div>
        <div>{{ obj.name }}</div>
        <button @click="changObj">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import { ref, reactive, watch, watchEffect } from "vue";
    const obj = ref({name:'你好'})
    function changObj(){
      obj.value.name+='我不好'
    }
    // obj是一個RefImpl對象,當不開啟深度監聽的時候,監聽obj無法檢測到obj屬性的變化
    watch(obj,()=>{
      console.log(obj.value.name);
    }, { deep: true })
    </script>
     
    <style>
    </style>
    2.immediate

    是否開啟初始化檢測,默認是值發生變化時,才會執行監聽器里面的方法,開啟immediate后初始化就執行一次。

    <template>
      <div>
        <div>{{ obj.name }}</div>
        <button @click="changObj">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import { ref, reactive, watch, watchEffect } from "vue";
    const obj = ref({name:'你好'})
    function changObj(){
      obj.value.name+='我不好'
    }
    // obj是一個RefImpl對象,當不開啟深度監聽的時候,監聽obj無法檢測到obj屬性的變化
    watch(obj,()=>{
      console.log(obj.value.name);
    }, { deep: true,immediate:true })
    </script>
     
    <style>
    </style>

    五、通過watchEffect()簡化watch

    偵聽器的回調使用與源完全相同的響應式狀態是很常見的。例如:

    <template>
      <div>
        <div>{{ obj.name }}</div>
        <button @click="changObj">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import { ref, reactive, watch, watchEffect } from "vue";
    const obj = ref({name:'你好'})
    function changObj(){
      obj.value.name+='我不好'
    }
    watch(obj.value,()=>{
      console.log(obj.value.name);
    })
    </script>
     
    <style>
    </style>

    我們可以使用watchEffect 函數來簡化上面的代碼。watchEffect() 允許我們自動跟蹤回調的響應式依賴。上面的偵聽器可以重寫為:

    <template>
      <div>
        <div>{{ obj.name }}</div>
        <button @click="changObj">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import { ref, reactive, watch, watchEffect } from "vue";
    const obj = ref({name:'你好'})
    function changObj(){
      obj.value.name+='我不好'
    }
    // watch(obj.value,()=>{
    //   console.log(obj.value.name);
    // })
    watchEffect(()=>{
      console.log(obj.value.name);
    })
    </script>
     
    <style>
    </style>

    注:需要注意的是watchEffect 回調會立即執行,不需要指定immediate

    六、watch vs. watchEffect

    watch 和 watchEffect 都能響應式地執行有副作用的回調。它們之間的主要區別是追蹤響應式依賴的方式:

    • watch 只追蹤明確偵聽的數據源。它不會追蹤任何在回調中訪問到的東西。另外,僅在數據源確實改變時才會觸發回調。watch 會避免在發生副作用時追蹤依賴,因此,我們能更加精確地控制回調函數的觸發時機。

    • watchEffect,則會在副作用發生期間追蹤依賴。它會在同步執行過程中,自動追蹤所有能訪問到的響應式屬性。這更方便,而且代碼往往更簡潔,但有時其響應性依賴關系會不那么明確。

    七、回調觸發機制與停止監聽器

    如果想在偵聽器回調中能訪問被 Vue 更新之后的 DOM,你需要指明 flush: 'post' 選項:

    watch(source, callback, {
      flush: 'post'
    })
     
    watchEffect(callback, {
      flush: 'post'
    })

    停止監聽

    在 setup() 或 <script setup> 中用同步語句創建的偵聽器,會自動綁定到宿主組件實例上,并且會在宿主組件卸載時自動停止。因此,在大多數情況下,你無需關心怎么停止一個偵聽器。

    一個關鍵點是,偵聽器必須用同步語句創建:如果用異步回調創建一個偵聽器,那么它不會綁定到當前組件上,你必須手動停止它,以防內存泄漏。如下方這個例子:

    // ...當該偵聽器不再需要時
    unwatch()

    關于“Vue3中的watch如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    六安市| 龙游县| 锦屏县| 北辰区| 航空| 永年县| 宁化县| 闸北区| 余江县| 贵州省| 平定县| 诸城市| 渭南市| 上栗县| 乌审旗| 镇远县| 泌阳县| 桂林市| 玉树县| 友谊县| 南江县| 延庆县| 通化县| 瓮安县| 山东| 柘荣县| 容城县| 江山市| 安庆市| 调兵山市| 巨野县| 平远县| 临湘市| 桃江县| 南城县| 长治县| 凯里市| 鄂尔多斯市| 新乡县| 台南县| 沅江市|