Fungsi jam tangan digunakan untuk mendengar perubahan dalam nilai tertentu Apabila nilai berubah, logik pemprosesan yang sepadan dicetuskan.
<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>
digunakan untuk membolehkan pemantauan mendalam
<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>
Sama ada untuk mendayakan pengesanan permulaan Secara lalai, kaedah dalam pendengar hanya akan dilaksanakan apabila nilai berubah Selepas serta-merta didayakan, pengamulaan akan dilaksanakan sekali.
<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>
Adalah perkara biasa untuk panggilan balik pendengar menggunakan keadaan reaktif yang sama seperti sumber. Contohnya:
<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>
Kita boleh menggunakan fungsi watchEffect untuk memudahkan kod di atas. watchEffect()
Membolehkan kami menjejak kebergantungan reaktif panggilan balik secara automatik. Pendengar di atas boleh ditulis semula sebagai:
<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>
Nota: Perlu diingat bahawa panggil balik watchEffect akan dilaksanakan serta-merta, tidak perlu menyatakan segera
watch(source, callback, { flush: 'post' }) watchEffect(callback, { flush: 'post' })
// ...当该侦听器不再需要时 unwatch()
Atas ialah kandungan terperinci Cara menggunakan jam tangan dalam Vue3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!