這里的知識是結合視頻以及其他文章一起學習,僅用于個人復習記錄
ref 和reactive
ref 用于基本類型
reactive 用于引用類型
如果使用ref 傳遞對象,修改值時候需要寫為obj.value.attr 方式修改屬性值
如果使用reactive 處理對象,直接obj.attr 即可 達到響應式效果
watch
watch 監聽多個基本值,返回的newValue 和 oldValue是一個數組
watch 監聽reactive 對象 無法正確獲取oldValue(如果不需要考慮oldValue,那么這個問題影響不大)
watch 第一個參數只能是ref reactive返回值,如果想監聽對象里邊某個屬性,則需要通過函數返回,如果該屬性指向的是一個引用類型,則需要開啟深度監聽才能監聽到變化
如果watch 監聽ref(對象),如果監聽對象 深層的變化,則需要傳遞deep(此時監聽的是ref 對象,對于value指向的對象的屬性變化變化需要開啟deep)
如果watch 監聽ref(對象),如果監聽對象.value 深層的變化,則不需要傳遞deep(此時監聽的是.value 也就是 reactive 對象不需要開啟deep)
// 下面兩個都滿足第一個參數是ref 或者reactive對象,一個監聽的是ref對象一個是reactive對象
// 需要開啟deep 才能監聽到age變化
watch(obj, (newValue, oldValue) => {console.log(newValue, oldValue);
}, { deep: true })
//
watch(obj.value, (newValue, oldValue) => {console.log(newValue, oldValue);
})
watchEffect
watch 既要指明監聽的屬性也要指明監聽的回調,而watchEffect不用指明監聽哪個屬性,我感覺watchEffect更好用
回調里邊,用到哪個值就監聽哪個值,如果被監聽的值發生變化時候,回調就會觸發,比如監聽查詢關鍵字變化來決定觸發查詢操作
watchEffect(() => {if (keywords.value != '') {console.log('開始搜索', keywords.value);}
})
onActivated 和 onDeactivated(還沒使用過)
補充生命周期函數activated和deactivated
這兩個是路由組件所獨有的兩個鉤子,用于捕獲路由組件的激活狀態,因為跳進另一個路由組件的時候,前一個路由組件會被銷毀,但是加了緩存的路由,則不會被觸發銷毀流程;使用這兩個替代銷毀時的生命周期函數;
onActivated:表示路由組件被激活時觸發;
onDeactivated:表示路由組件失活時觸發;
這個在編寫uniapp 時候有個類似的東西,比如push 到其他頁面時候,前面一個頁面并不會被銷毀,而是只是觸發了隱藏,我覺得這兩個周期函數類似uniapp 當中的onShow 和 onHide 周期