中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

全市網(wǎng)站建設(shè)情況摸底調(diào)查百度網(wǎng)站關(guān)鍵詞排名查詢

全市網(wǎng)站建設(shè)情況摸底調(diào)查,百度網(wǎng)站關(guān)鍵詞排名查詢,移動互聯(lián)網(wǎng)開發(fā)的前景,wordpress 插件太多Vue3的watch底層源碼主要是通過使用Proxy對象來實現(xiàn)的。在Vue3中,每個組件實例都會有一個watcher實例,用于監(jiān)聽組件數(shù)據(jù)的變化。當(dāng)組件數(shù)據(jù)發(fā)生變化時,watcher實例會觸發(fā)回調(diào)函數(shù),從而更新組件的視圖。 Vue3的watch底層源碼主要涉…

Vue3的watch底層源碼主要是通過使用Proxy對象來實現(xiàn)的。在Vue3中,每個組件實例都會有一個watcher實例,用于監(jiān)聽組件數(shù)據(jù)的變化。當(dāng)組件數(shù)據(jù)發(fā)生變化時,watcher實例會觸發(fā)回調(diào)函數(shù),從而更新組件的視圖。

Vue3的watch底層源碼主要涉及到以下幾個部分:

  1. 創(chuàng)建watcher對象
  2. 收集依賴
  3. 觸發(fā)更新

下面對這三個部分進行詳細解讀。

  1. 創(chuàng)建watcher對象

在Vue3中,watcher對象是通過watchEffect函數(shù)創(chuàng)建的。watchEffect函數(shù)接收一個函數(shù)作為參數(shù),這個函數(shù)就是我們要監(jiān)聽的響應(yīng)式數(shù)據(jù)的getter函數(shù)。watchEffect函數(shù)會在創(chuàng)建watcher對象時立即執(zhí)行這個函數(shù),并收集響應(yīng)式數(shù)據(jù)的依賴。

創(chuàng)建watcher對象的源碼如下:

function watchEffect(effect, options) {const watcher = new ReactiveEffect(effect, options)watcher.run()return () => {watcher.stop()}
}

其中,ReactiveEffect是一個類,用來創(chuàng)建watcher對象。run方法會執(zhí)行傳入的函數(shù),并收集依賴。stop方法會停止watcher對象的執(zhí)行。

  1. 收集依賴

在Vue3中,依賴收集是通過track函數(shù)實現(xiàn)的。track函數(shù)接收兩個參數(shù):響應(yīng)式數(shù)據(jù)對象和屬性名。它會在getter函數(shù)執(zhí)行時,將當(dāng)前的watcher對象收集到響應(yīng)式數(shù)據(jù)對象的依賴列表中。

track函數(shù)的源碼如下:

function track(target, key) {if (activeEffect === undefined) {return}let depsMap = targetMap.get(target)if (!depsMap) {targetMap.set(target, (depsMap = new Map()))}let dep = depsMap.get(key)if (!dep) {depsMap.set(key, (dep = new Set()))}if (!dep.has(activeEffect)) {dep.add(activeEffect)activeEffect.deps.push(dep)}
}

其中,targetMap是一個全局的Map對象,用來存儲所有響應(yīng)式數(shù)據(jù)對象的依賴關(guān)系。activeEffect是一個全局的watcher對象,表示當(dāng)前正在執(zhí)行的watcher對象。

  1. 觸發(fā)更新

在Vue3中,更新是通過trigger函數(shù)實現(xiàn)的。trigger函數(shù)接收兩個參數(shù):響應(yīng)式數(shù)據(jù)對象和屬性名。它會在setter函數(shù)執(zhí)行時,遍歷響應(yīng)式數(shù)據(jù)對象的依賴列表,依次執(zhí)行每個watcher對象的run方法,從而觸發(fā)更新。

trigger函數(shù)的源碼如下:

function trigger(target, key) {const depsMap = targetMap.get(target)if (!depsMap) {return}const dep = depsMap.get(key)if (!dep) {return}dep.forEach(effect => {if (effect.scheduler) {effect.scheduler()} else {effect.run()}})
}

其中,scheduler是一個可選的參數(shù),表示watcher對象的調(diào)度函數(shù)。如果存在調(diào)度函數(shù),則會先執(zhí)行調(diào)度函數(shù),再執(zhí)行run方法。

下面是watch底層源碼的主要實現(xiàn)步驟:

  1. 創(chuàng)建一個Proxy對象,用于監(jiān)聽數(shù)據(jù)的變化。

  2. 在Proxy對象的set方法中,觸發(fā)watcher實例的回調(diào)函數(shù)。

  3. 在watcher實例的回調(diào)函數(shù)中,執(zhí)行用戶定義的回調(diào)函數(shù),并將新舊值傳遞給回調(diào)函數(shù)。

  4. 在回調(diào)函數(shù)中,執(zhí)行用戶定義的邏輯,例如更新組件的視圖。

下面是watch底層源碼的簡單實現(xiàn):

function watch(source, callback) {const watcher = {callback: callback,oldValue: null,update() {const newValue = source();if (newValue !== this.oldValue) {this.callback(newValue, this.oldValue);this.oldValue = newValue;}}};watcher.update();return watcher;
}function reactive(obj) {return new Proxy(obj, {set(target, key, value) {target[key] = value;watchers.forEach(watcher => watcher.update());return true;}});
}const data = reactive({ count: 0 });const watchers = [];watchers.push(watch(() => data.count, (newValue, oldValue) => {console.log(`count changed from ${oldValue} to ${newValue}`);
}));data.count++; // count changed from 0 to 1

在上面的代碼中,我們定義了一個watch函數(shù)和一個reactive函數(shù)。watch函數(shù)用于創(chuàng)建watcher實例,reactive函數(shù)用于創(chuàng)建Proxy對象。當(dāng)數(shù)據(jù)發(fā)生變化時,Proxy對象的set方法會觸發(fā)watcher實例的回調(diào)函數(shù),從而更新組件的視圖。

http://www.risenshineclean.com/news/52556.html

相關(guān)文章:

  • 網(wǎng)站設(shè)計制作費用多少怎么做互聯(lián)網(wǎng)營銷推廣
  • 南陽東莞網(wǎng)站建設(shè)公司優(yōu)化排名推廣關(guān)鍵詞
  • 網(wǎng)站可以微信支付是怎么做的域名??烤W(wǎng)頁推廣大全
  • 網(wǎng)站定制化開發(fā)介紹新網(wǎng)
  • 哈爾濱網(wǎng)站建設(shè)2017站長統(tǒng)計 網(wǎng)站統(tǒng)計
  • 西安做網(wǎng)站朋朋抖音關(guān)鍵詞推廣
  • 商城網(wǎng)站建設(shè)系統(tǒng)企業(yè)網(wǎng)站建設(shè)推廣
  • 免費網(wǎng)站推廣軟文發(fā)布中國國家數(shù)據(jù)統(tǒng)計網(wǎng)
  • 網(wǎng)站備案密碼忘做seo需要哪些知識
  • 貴州網(wǎng)絡(luò)推廣公司百色seo快速排名
  • 阿里巴巴吧做網(wǎng)站關(guān)鍵詞排名優(yōu)化網(wǎng)站
  • wordpress foxpay企業(yè)站seo報價
  • 虛擬主機能干什么優(yōu)化網(wǎng)站打開速度
  • 確保網(wǎng)站地址沒有做301跳轉(zhuǎn)新網(wǎng)站怎么做推廣
  • 喬拓云智能建站官網(wǎng)登錄入口廈門關(guān)鍵詞排名提升
  • 網(wǎng)站ie不兼容如何開發(fā)網(wǎng)站
  • 唐山市住房城鄉(xiāng)建設(shè)部網(wǎng)站主頁營業(yè)推廣策劃
  • 朝陽網(wǎng)站建設(shè)seo是什么技術(shù)
  • 網(wǎng)站建設(shè)好的圖片seo優(yōu)化專員工作內(nèi)容
  • 網(wǎng)站建設(shè)的具體過程網(wǎng)絡(luò)營銷崗位職責(zé)和任職要求
  • wordpress搜索引擎源碼深圳seo招聘
  • 做配音任務(wù)的網(wǎng)站百度搜索推廣費用
  • 免費雙語網(wǎng)站模板如何把網(wǎng)站推廣
  • jsp網(wǎng)站購物車怎么做seo外鏈工具軟件
  • 濟南個人網(wǎng)站建設(shè)系統(tǒng)優(yōu)化軟件哪個最好的
  • 資訊網(wǎng)站模板周口seo公司
  • 物流網(wǎng)站建設(shè)與管理長沙網(wǎng)站策劃
  • 網(wǎng)上備案查詢seo自然搜索優(yōu)化排名
  • wordpress怎么新建欄目seo推廣排名公司
  • 在哪個網(wǎng)站做流程圖比較好看軟件開發(fā)網(wǎng)