您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Vue3 setup的注意點及watch的監視屬性有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Vue3 setup的注意點及watch的監視屬性有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
1.setup的執行時間要比beforCreate執行要早
export default { name: "Demo", beforeCreate(){ console.log('beforeCreate已執行'); }, setup() { console.log('setup已執行'); let person = reactive({ name: "小明", age: 20, }); return { person, }; }, };
setup的參數
1.props: 值為對象,包含: 組件外部傳遞過來,且組件內部聲明接收了的屬性
2.context:上下文對象
①attrs:值為對象,包含: 組件外部傳遞過來,但沒有在props配置中聲明的屬性,相當于 this.$attrs
export default { name: "Demo", props:['msg','age'], setup(props) { console.log(props); let person = reactive({ name: "小明", age: 20, }); return { person, }; }, };
②slots: 收到的插槽內容,相當于 this.$slots
。
在App中定義插槽
<template v-slot:qwe> <span>123</span> </template> <template v-slot:ewq> <span>321</span> </template>
在子組件中獲取到插槽
console.log(context.slots); // 得到插槽
③emit: 分發自定義事件的函數,相當于 this.$emit
。
在App中寫一個自定義事件并且傳給組件
<Demo @hi="Hello" msg="山魚" age=10> </Demo>
setup() { function Hello(){ console.log('你好!'); } return { Hello } }
然后去到子組件使用context.comit獲取到自定義事件
function point(){ context.emit('hi',666) } 5TgxPT2v-1681788304084)] ```js function point(){ context.emit('hi',666) }
與Vue2中的computed配置功能一致
import { reactive,computed} from "vue"; export default { name: "Demo", setup() { let person = reactive({ firstName: "小", lastName: "明", }); // 計算屬性的簡寫形式,不考慮修改,是只讀的 /*person.fullName= computed(()=>{ return person.firstName+'-'+person.lastName }) */ // 計算屬性的完整形式(可以讀改) person.fullName= computed({ get(){ return person.firstName +'-'+person.lastName }, set(value){ const arr = value.split('-') person.firstName = arr[0] person.lastName = arr[1] } }) return { person, }; }, };
有兩種watch,分別是單個屬性數據監視,和多個屬性數據監視
watch中的三個參數分別為,監視的對象,監視的函數,監視屬性的配置
監視ref所定義的數據
①監視屬性監視ref的一個響應式的值
watch(sum, (newvalue, oldvalue) => { console.log('當前值為'+newvalue, '以前值為'+oldvalue); });
②監視ref所定義的多個響應式數據
watch([sum,msg], (newvalue, oldvalue) => { console.log('當前值為'+newvalue, '以前值為'+oldvalue); });
監視reactive所定義的數據
①監視reactive定義的數據的變化
使用reactive定義的數據無法使用watch正確的獲取newValue
并且會強制開啟深度監視
watch(person,(newValue, oldValue) => { console.log('person變化了',newValue,oldValue) })
②監視reactive所定義的響應式數據的某個屬性
watch(()=>person.name,(newValue,oldValue)=>{ console.log('person.name發生了變化',newValue,oldValue) })
③監視reactive所定義的響應式數據的某些屬性
watch([()=>{person.age},()=>{person.name}],(newValue,oldValue)=>{ console.log('person.name發生了變化',newValue,oldValue) })
④特殊形況
注:該情況監視的是recative所定義的對象中的某個屬性,所以deep可以開啟
watch(()=>person.job,(newValue,oldValue)=>{ console.log('person.name發生了變化',newValue,oldValue) }, {deep: true})
讀到這里,這篇“Vue3 setup的注意點及watch的監視屬性有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。