사실 이건 필요 없을 것 같아요, 하하하하하!
말하자면 watch와 watchEffect의 기능은 동일하다고 이해하시면 됩니다.
watch
: 지정된 종속성 소스를 표시하고 종속성 소스가 업데이트되면 콜백 함수를 실행합니다. watchEffect
: 종속성 소스를 자동으로 수집하고 종속성 소스가 업데이트되면 자체적으로 다시 실행됩니다. watch
:显示指定依赖源,依赖源更新时执行回调函数。watchEffect
:自动收集依赖源,依赖源更新时候重新执行自身。
watchEffect 如果存在的话,组件初始化的时候就会自动自行一次,不需要像 watch 一样设置立即执行。
watch 每次回调之后是可以获取到最新值和上一次的老值,但是 watchEffect 是拿不到的。
watchEffect 不需要指定监听的属性,他会自动进行依赖收集,只要我们回调中使用了响应式的属性,那么这些属性在变更之后这个回调都会执行,不像 watch 只能监听指定的属性。
使用的时候也是需要引入。
记住一点哈, watch 可以代替 watchEffect,但是 watchEffect 不能替代 watch。
总结:能用 watch 就不要用 watchEffect。
首先我们写一个简单的 watchEffect 侦听器。
<template> <div> <h2>{{name}}</h2> <button @click="btn">修改name</button> </div> </template> <script> import { ref, watchEffect } from "vue"; export default { name: "App", setup() { const name = ref("我是????????."); function btn() { name.value = "????????."; } const res = watchEffect(() => { console.log("watchEffect 执行了"); }); return { name, btn }; } }; </script>
记住 watchEffect 使用也是需要先引入的,不然不好使哈,然后我们保存上面的代码,然后刷新页面看一下执行结果。
我们发现哈,我们一刷新页面,控制台直接打印了我们输出的内容,所以说呢,watchEffect 组件一加载完就会执行。
我们看到,watchEffect 使用的时候并没有设置监听哪个参数,只有一个回调函数,因为他会自动进行依赖收集,只要我们回调中使用了响应式的属性,那么这些属性在变更之后这个回调都会执行。
比如我们监听 name 的情况。
<template> <div> <h2>{{name}}</h2> <button @click="btn">修改name</button> </div> </template> <script> import { ref, watchEffect } from "vue"; export default { name: "App", setup() { const name = ref("我是????????."); function btn() { name.value = "????????."; } const res = watchEffect(() => { console.log(name.value); }); return { name, btn }; } }; </script>
我们在回调函数打印一下 name 的值。
上面的案例是用来监听一个基本数据,如果监听一个对象呢?
其实也是一样的哈。
<template> <div> <h2>{{boy.age}}</h2> <button @click="boy.age++">修改name</button> </div> </template> <script> import { ref, watchEffect, reactive } from "vue"; export default { name: "App", setup() { const boy = reactive({ name: "我是????????.", age: 10 }); const res = watchEffect(() => { console.log(boy.age); }); return { boy }; } }; </script>
上边代码呢,一个按钮,每次点击让 boy 对象里面的 age 加一操作,然后监听一下 age 的新值
可以看到是完全没有问题的哈!
上边说过了哈,只要我们回调中使用了响应式的属性,那么这些属性在变更之后这个回调都会执行,不像 watch 只能监听指定的属性。
啥意思呢,简单理解一下,就是回调里面使用了的话他就执行,没用他就不执行。
就像上面的案例,修改 age 的时候,我们在回调里面打印了 age,在回调里面涉及到 age 了,他就会执行,如果我们这次不使用改变的 age,只打印一句话,看一下能不能执行回调哈。
<template> <div> <h2>{{boy.age}}</h2> <button @click="boy.age++">修改name</button> </div> </template> <script> import { ref, watchEffect, reactive } from "vue"; export default { name: "App", setup() { const boy = reactive({ name: "我是????????.", age: 10 }); const res = watchEffect(() => { console.log("执行了"); }); return { boy }; } }; </script>
刷新保存,点击按钮修改 age 的值,看一下控制台有没有打印 执行了
const res = watchEffect(() => { console.log(boy.age); });
res() // 关闭
<script> import { ref, watchEffect, reactive } from "vue"; export default { name: "App", setup() { const boy = reactive({ name: "我是????????.", age: 10 }); const res = watchEffect(() => { console.log(boy.age); }); res() // 关闭监听 return { boy }; } }; </script>{{boy.age}}
executed
세 단어가 콘솔에 인쇄되는지 확인하세요. 🎜🎜그 문장을 이해하셨나요? 언제 처형됐는지 아시나요? 좋아요. 🎜🎜watchEffect 모니터링 끄기🎜🎜watchEffect 모니터링을 사용한다고 가정해 봅시다. 그런데 지금 모니터링을 원하지 않으면 어떻게 해야 하나요? 실제로는 매우 간단합니다. 🎜rrreee🎜위에서 watchEffect 리스너를 만들지 않았나요? 닫으려면 한 번만 호출하면 닫힙니다. 🎜rrreee🎜아래의 구체적인 코드를 확인하세요. 🎜rrreee🎜저장하고 버튼을 눌러 효과를 확인해 보세요. 🎜위 내용은 Vue3에서 watchEffect 리스너를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!