<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
watch
和watchEffect
都是vue3
中的監聽器,但是在寫法和使用上是有區別的,這篇文章主要是介紹一下watch
和watchEffect
的使用方法以及他們之間的區別。
<template> <input type="text" v-model="text1" /> </template> <script setup> import { ref, watch } from 'vue' const text1 = ref('') watch(text1, (newVal, oldVal) => { console.log('監聽單個資料', newVal, oldVal) }) </script>
結果:
<template> <input type="text" v-model="text1" /> <input type="text" v-model="text2" /> </template> <script setup> import { ref, watch } from 'vue' const text1 = ref('') const text2 = ref('') watch([text1, text2], (newVal, oldVal) => { console.log('監聽一組資料', newVal, oldVal) }) </script>
結果:
<template> name: <input type="text" v-model="student.name" /> age: <input type="number" v-model="student.age" /> </template> <script setup> import { reactive, watch } from 'vue' const student = reactive({ name: '', age: '' }) watch(student, (newVal, oldVal) => { console.log('newVal', newVal) console.log('oldVal', newVal) }) </script>
結果:
watch
還有第三個引數,deep
和immediate
,可以加上看看效果
<template> name: <input type="text" v-model="student.name" /> age: <input type="number" v-model="student.age" /> </template> <script lang="ts" setup> import { reactive, watch } from 'vue' const student = reactive({ name: '', age: '' }) watch(() => student.name, (newVal, oldVal) => { console.log('newVal', newVal) console.log('oldVal', newVal) }, { deep: true, immediate: true }) </script>
監聽物件某一個屬性的時候需要用箭頭函數 結果:
關於watchEffect
,官網是這麼介紹的:為了根據響應式狀態自動應用和重新應用副作用,我們可以使用watchEffect
方法,它立即執行傳入的一個函數,同時響應式追蹤其依賴,並在其依賴變更時重新執行該函數。 也就是說,我們並不需要傳入一個特定的依賴源,而且它會立即執行一遍回撥函數,如果函數產生了副作用,那它就會自動追蹤副作用的依賴關係,自動分析出響應源。光看概念可能比較模糊,先來看個最簡單的例子:
<template> name: <input type="text" v-model="student.name" /> age: <input type="number" v-model="student.age" /> </template> <script lang="ts" setup> import { reactive, watchEffect } from 'vue' const student = reactive({ name: '', age: '' }) watchEffect(() => { console.log('name: ',student.name, 'age: ', student.age) }) </script>
結果:
副作用,那什麼是副作用呢,其實很簡單,就是在監聽之前,我得做一件事。
<template> name: <input type="text" v-model="student.name" /> age: <input type="number" v-model="student.age" /> <h2>{{student.name}}</h2> </template> <script lang="ts" setup> import { reactive, watchEffect } from 'vue' const student = reactive({ name: '', age: '' }) watchEffect((oninvalidate) => { oninvalidate(() => { student.name = '張三' }) console.log('name: ', student.name) }, { // pre 元件更新前; sync:強制效果始終同步; post:元件更新後執行 flush: 'post' // dom載入完畢後執行 }) </script>
監聽之前讓student.name
賦值為'張三',無論你輸入什麼值,name
一直都是'張三'
我們用同步語句建立的監聽器,會自動繫結到元件範例上,並且會在元件解除安裝時自動停止,但是,如果我們在非同步回撥裡建立一個監聽器,那它就不會繫結到當前元件上,必須手動去停止,防止記憶體漏失。 那怎麼去停止呢,其實我們只需要呼叫一下watch
或watchEffect
返回的函數
const stop = watchEffect(() => {}) // 停止監聽 unwatch()
用了一遍watch
和watchEffect
之後,發現他倆主要有以下幾點區別:
watch
是惰性執行的,而watchEffect
不是,不考慮watch
第三個設定引數的情況下,watch
在元件第一次執行的時候是不會執行的,只有在之後依賴項變化的時候再執行,而watchEffect
是在程式執行到此處的時候就會立即執行,而後再響應其依賴變化執行。watch
需要傳遞監聽的物件,watchEffect
不需要到此這篇關於vue3中watch和watchEffect實戰梳理的文章就介紹到這了,更多相關vue watch和watchEffect 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45