Heim > Web-Frontend > View.js > Hauptteil

So verwenden Sie die Uhr in Vue3

WBOY
Freigeben: 2023-05-12 09:49:05
nach vorne
1798 Leute haben es durchsucht

    Die Watch-Funktion wird verwendet, um auf Änderungen eines bestimmten Werts zu achten. Wenn sich der Wert ändert, wird die entsprechende Verarbeitungslogik ausgelöst.

    1. Basisinstanz von watch

    <template>
      <div>
        <div>{{ count }}</div>
        <button @click="changCount">更改count的值</button>
      </div>
    </template>
     
    <script setup>
    import {ref,reactive, watch} from &#39;vue&#39;
    const count = ref(0)
    function changCount(){
      count.value++
    }
    watch(count,(newValue,oldValue)=>{
      if(newValue){
        console.log(`我侦听到了count状态的变化,当前值为${newValue},从而处理相关逻辑`);
      }
    })
    </script>
     
    <style>
     
    </style>
    Nach dem Login kopieren

    2. Watch überwacht mehrere Daten

    <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>
    Nach dem Login kopieren

    Ein Array bestehend aus mehreren Quellen

    <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>
    Nach dem Login kopieren

    4 Der Konfigurationsparameter

    1.deep

    wird verwendet, um die Tiefenüberwachung zu aktivieren.

    <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:&#39;你好&#39;})
    function changObj(){
      obj.value.name+=&#39;我不好&#39;
    }
    watch(()=>obj.value.name,(name)=>{
      console.log(name);
    })
    </script>
     
    <style>
    </style>
    Nach dem Login kopieren

    2.immediate

    Gibt an, ob die Methode im Listener nur ausgeführt wird, wenn sich der Wert ändert Wird nach der Initialisierung nach sofortiger einmaliger Aktivierung ausgeführt.

    <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:&#39;你好&#39;})
    function changObj(){
      obj.value.name+=&#39;我不好&#39;
    }
    // obj是一个RefImpl对象,当不开启深度监听的时候,监听obj无法检测到obj属性的变化
    watch(obj,()=>{
      console.log(obj.value.name);
    }, { deep: true })
    </script>
     
    <style>
    </style>
    Nach dem Login kopieren

    5. Vereinfachen Sie die Überwachung durch watchEffect()

    Es ist üblich, dass Listener-Rückrufe genau denselben reaktiven Zustand wie die Quelle verwenden. Zum Beispiel:

    <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:&#39;你好&#39;})
    function changObj(){
      obj.value.name+=&#39;我不好&#39;
    }
    // obj是一个RefImpl对象,当不开启深度监听的时候,监听obj无法检测到obj属性的变化
    watch(obj,()=>{
      console.log(obj.value.name);
    }, { deep: true,immediate:true })
    </script>
     
    <style>
    </style>
    Nach dem Login kopieren

    Wir können die watchEffect-Funktion verwenden, um den obigen Code zu vereinfachen.

    Ermöglicht uns, reaktive Abhängigkeiten von Rückrufen automatisch zu verfolgen. Der obige Listener kann wie folgt umgeschrieben werden:

    <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:&#39;你好&#39;})
    function changObj(){
      obj.value.name+=&#39;我不好&#39;
    }
    watch(obj.value,()=>{
      console.log(obj.value.name);
    })
    </script>
     
    <style>
    </style>
    Nach dem Login kopieren

    Hinweis: Es ist zu beachten, dass der watchEffect-Rückruf sofort ausgeführt wird und keine sofortige Angabe erforderlich ist

    watchEffect()6. Sowohl watch als auch watchEffect können reaktionsschnell ausgeführt werden Rückruf zu Nebenwirkungen. Der Hauptunterschied zwischen ihnen besteht in der Art und Weise, wie reaktive Abhängigkeiten verfolgt werden:

    watch verfolgt nur Datenquellen, die explizit abgehört werden. Es wird nichts verfolgt, was im Rückruf aufgerufen wird. Darüber hinaus wird der Rückruf nur ausgelöst, wenn sich die Datenquelle tatsächlich ändert. watch vermeidet Tracking-Abhängigkeiten, wenn Nebenwirkungen auftreten, sodass wir genauer steuern können, wann die Rückruffunktion ausgelöst wird.

      watchEffect verfolgt Abhängigkeiten beim Auftreten von Nebenwirkungen. Während der Synchronisierung werden automatisch alle zugänglichen reaktiven Eigenschaften verfolgt. Dies ist bequemer und der Code ist tendenziell sauberer, aber manchmal sind seine reaktiven Abhängigkeiten weniger explizit.
    • 7. Callback-Auslösemechanismus und Stoppen des Listeners
    • Wenn Sie im Listener-Callback auf das von Vue aktualisierte DOM zugreifen möchten, müssen Sie die Option „flush: 'post“ angeben:

      <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:&#39;你好&#39;})
      function changObj(){
        obj.value.name+=&#39;我不好&#39;
      }
      // watch(obj.value,()=>{
      //   console.log(obj.value.name);
      // })
      watchEffect(()=>{
        console.log(obj.value.name);
      })
      </script>
       
      <style>
      </style>
      Nach dem Login kopieren
    • Hör auf zuzuhören

    Listener erstellt mit synchronen Anweisungen in setup() oder
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage