Die Watch-Funktion wird verwendet, um auf Änderungen eines bestimmten Werts zu achten. Wenn sich der Wert ändert, wird die entsprechende Verarbeitungslogik ausgelöst.
<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>
<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>
<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>
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:'你好'}) function changObj(){ obj.value.name+='我不好' } // obj是一个RefImpl对象,当不开启深度监听的时候,监听obj无法检测到obj属性的变化 watch(obj,()=>{ console.log(obj.value.name); }, { deep: true }) </script> <style> </style>
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:'你好'}) function changObj(){ obj.value.name+='我不好' } // obj是一个RefImpl对象,当不开启深度监听的时候,监听obj无法检测到obj属性的变化 watch(obj,()=>{ console.log(obj.value.name); }, { deep: true,immediate:true }) </script> <style> </style>
<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()
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:
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:'你好'}) function changObj(){ obj.value.name+='我不好' } // watch(obj.value,()=>{ // console.log(obj.value.name); // }) watchEffect(()=>{ console.log(obj.value.name); }) </script> <style> </style>