最近在做一個需求的時候,用到了一個 Vue3 內置的 API,發現真的非常實用,分享給大家。
需求是這樣的,我有一個變量 sum,是通過computed去計算的,且 sum 依賴的變量有的是響應式的,有的不是響應式的,所以會造成以下的后果,當非響應式變量改變時,并不會觸發sum 的響應式更新,只有響應式變量改變時才會觸發sum的響應式更新。
圖片
所以我需要用到一個 Vue3 的內置 API,它就是customRef。
創建一個自定義的 ref,顯式聲明對其依賴追蹤和更新觸發的控制方式。
圖片
customRef() 預期接收一個工廠函數作為參數,這個工廠函數接受 track 和 trigger 兩個函數作為參數,并返回一個帶有 get 和 set 方法的對象。
一般來說,track() 應該在 get() 方法中調用,而 trigger() 應該在 set() 中調用。然而事實上,你對何時調用、是否應該調用他們有完全的控制權。
創建一個防抖 ref,即只在最近一次 set 調用后的一段固定間隔后再調用:
圖片
在組件中使用:
圖片
圖片
再回到一開始的話題,我遇到的問題是:當非響應式變量改變時,并不會觸發sum 的響應式更新,只有響應式變量改變時才會觸發sum的響應式更新。
所以我們需要當非響應式變量count1、count2改變的時候,去手動觸發 computed 的計算,這樣才能更新 sum,但是 computed 返回的不是一個函數啊,我們要怎么去手動觸發計算呢?
所以這時候就需要一個可控的 computed,它擁有以下功能:
1、能根據響應式變量去自動觸發計算更新
2、提供一個方法讓用戶手動去調用觸發更新
期望使用方式是這樣的:
圖片
具體的代碼實現如下:
本文鏈接:http://www.tebozhan.com/showinfo-26-90851-0.htmlVue3 新玩法!我能操控計算屬性 Computed!
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com