1、ref和reactive的區別
兩者都是響應式數據的聲明。Reactive只適用于非基本數據類型,如對象,數組等。而ref是兼容適用于reactive的的數據類型的以及其他數據,靈活性較高。ref聲明的變量取值時需要.value。在<template></template>中不需要加.value,模版語法會自動解析。ref底層也是用到了reactive的,相當于ref多包裝了一層,支持基本數據類型。
2、watch和watcheffct的區別
兩者都是監聽數據變化,然后執行回調函數。兩者的區別是適用watch需要指明監聽對象。watcheffct則不需要指明,只要在回調函數中的的響應式變量就是監聽對象。在watch中對于對象,如果用箭頭函數來返回了這個對象,對象的屬性發生變化,這時候監聽失效了,我們可以用watch的deep屬性進行開啟深度監聽恢復監聽效果。兩者還有一個區別,當頁面初次加載時watch是不會觸發回調函數的,而watcheffct會執行回調函數。
3、父子組件傳參
父組件向子組件傳參,在子組件中使用defineprops定義要傳過來的參數,指定參數類型,是否必傳,以及可以設定默認值。這里props中定義的參數只能讀,不可修改。在父組件指定傳參的字段,在指定參數即可。
子組件向父組件傳參,可以使用事件進行傳參,父組件來監聽子組件定義的事件。子組件中要觸發的事件可以顯式地通過 defineEmits() 來聲明。
這里是通過點擊事件去觸發事件的傳遞,注意,父組件需要監聽子組件自定義的事件。
還有一種傳參方式:使用插槽,作用域插槽進行傳參,我們可以在子組件定義一個插槽,指定要傳參的內容,父組件用插槽名或者v-solt進行接受數據。
子組件:
父組件:
這里父組件不能用<div>標簽去接收插槽,得適用<template>。在父組件中如果要使用name去指定子組件中的插槽,得用<template>。