Vue3中customRef的使用
如其名,自定義Ref,可想而知它一定會返回一個Ref對象,那么開始吧
這里我們先定義這么一個函數(shù),里面封裝的是我們自己定義的ref
模板中
頁面上

上圖所示,我們能讀取,但是真能改變值嗎?

答案是不能!有人就會說了,我明明把最新的值給value賦值了啊,咋能夠呢?
這么說吧,你呢確實賦值了,但是get沒有重新執(zhí)行,模板呢還是未修改之前的模板,也就是說你沒有通知Vue去重新渲染模板
那么如何通知Vue去重新解析模板呢?
customRef中的回調(diào)會接收底層的兩個參數(shù),一個是track,也就是追蹤,你說它追蹤什么呢?欸,追蹤的就是get返回值的改變,它追蹤到了才會反應(yīng)到頁面上來,另一個是trigger,也就是觸發(fā),觸發(fā)啥?觸發(fā)開關(guān),開關(guān)干嘛的?通知Vue去重新解析模板
問題來了,這兩個參數(shù)啥前用?你想啊,當(dāng)你的值改變完之后是不是得通知Vue去重新解析模板?重新解析完模板之后是不是會重新調(diào)用get讀取值?那么讀取返回值之前是不是得先追蹤到變化?好了,代碼上見!
結(jié)果如下:最終拿到這個改變后的值了

有人又說了,這有啥用?我直接用官方給的ref不香嗎?
那咱們做個實驗,你說我要是一直往輸入框中輸入東西,會發(fā)生什么呢?

好家伙,好么,這得耗多少資源,一次輸入就響應(yīng)一次,當(dāng)真看恐怖??!
問題來了,如何解決?
有人就說,你咋啷個笨?你就開個定時器不就可以了?
喲呵,變異了,錯的離譜了,差點定時器開關(guān)

加上定時器開關(guān)
模板中
頁面上,觸發(fā)頁面更新的時機(jī)變成了,連續(xù)按鍵停止點后的500ms

但是有點不足,延遲時間寫死了,改需求
完事!這就是防抖!