記一次看diff原始碼如何操控虛擬DOM

2021-10-04 11:01:08 字數 1371 閱讀 4485

根據以往經驗 我們先看看snabbdom文件:snabbdom裡有個h 返回了個函式vnode

**的結尾返回了乙個vnode函式 其中 sel data children text 都是vue函式裡比較重要的,然後看看vnode.ts裡的**

vnode裡 返回了 這麼乙個資料 其中elm 就是vnode對應的dom

由上面我們還得知 與vnode有關聯的 還有乙個patch **裡匯出了乙個init函式 ;而init函式返回了乙個叫patch的函式(snabbdom.ts)

而patch函式裡 的第乙個if判斷式的意思是:判斷文件裡的 patch(container(dom元素),vnode) 裡的第乙個引數是不是vnode

如果不是建立乙個空的vnode,關聯到這個dom元素 emptynodeat函式裡建立乙個空的vnode 和elm(對應的dom)做乙個繫結

而第二個if判斷 判斷了新的vnode 和舊的vnode是不是都相等(key和sel都相等)函式samevnode裡的結構是這樣的:

而判斷裡 還有個及其重要的函式 patchvnode 就是用來做 vnode的對比來看看patchvnode 裡的結構:

然後就是updatechildren:

由於有大量注釋,所以就不做多解釋了~反正是給我自己看的

~~~~~~~~

記一次原始碼分析

首先分析一段很短的 include include using namespace std vector getdata return std move v returnv intmain 這段 是錯的,裡面出現了乙個很容易犯得bug 如果函式中有建立本地物件並需要返回時,只能返回物件,不能返回指標...

記一次閱讀灰度發布原始碼的感想

最早接觸灰度發布是聽到公司大佬提到的重大上線必須灰度。當時 灰度 這個專業詞語抓住了我的眼球。於是我也開始了對灰度發布的 起初的概念只限於部分讓部分機器上線最新功能,後面就更深化為使用者選取 資料反饋 回滾策略關鍵的三部。直到昨天無意間看到專案中灰度的部分原始碼,又瞬間開始深入研究起來。灰度要實現的...

記一次koa2原始碼的探索經歷

1.本文解決兩個問題,koa啟動的時候需要初始化哪些東西和做了哪些事情?2.一次完整的http請求,對於koa來說是怎麼處理的?3.我們先來回顧一下,我們在使用koa時所使用的一些 const koa require koa 載入koa框架 載入路由 監聽埠號,進行呼叫 logger.info we...