Vue原始碼 第六節資料驅動之認識VNode

2021-10-05 13:34:53 字數 1650 閱讀 4491

上一節我們分析了_render函式,它最後返回了vnode,這一節我們來認識一下vnode

由於dom元素是複雜的,所以每次我們操作dom元素會產生昂貴的代價。而vnode就是用乙個原生的js物件區描述乙個dom節點,所以它比建立乙個 dom 的代價要小很多。

// src/core/vdom/vnode.js

export

default

class

vnode

// deprecated: alias for componentinstance for backwards compat.

/* istanbul ignore next */

getchild()

: component |

void

}

// flow/vnode.js

declare inte***ce

vnodedata

; style?

: string | array

| object;

normalizedstyle?

: object;

props?:;

attrs?:;

domprops?:;

hook?:;

on?:?

; nativeon?:;

transition?

: object;

show?

: boolean;

// marker for v-show

inlinetemplate?:;

directives?

: array

; keepalive?

: boolean;

scopedslots?:;

model?:;

}

假設我們的html**時這樣子的:

>

hello

>

"1" class

="li-1"

>

goode night

li>

ul>

div>

vnode表示即:

, text:

'hello'

, children:[,

children:[,

text:

'good night'}]

}]}

這麼做的缺點在於:即使模板中只有乙個元素發生了變化,也會把整個模板替換掉。例如,乙個ul標籤下很多個li標籤,其中只有乙個li有變化,這種情況下如果使用新的ul去替代舊的ul,會有很多不必要的dom操作而造成效能上的損失。

vnode到真實dom需要經過creatediffpatch等幾個過程。

第六節 Node陣列

var arr new array var arr array var arr array 1,2,3,4 var arr var arr 1,2,3 instanceof 操作符 array.isarray 方法 1.將物件的鍵值轉換為陣列 object.keys 2.string型別轉換為陣列 ...

第六節 雙鏈表

結構特點 template struct dnode 設指標p指向雙鏈表中某一結點,則有下式成立 p llink rlink p p rlink llink 建立空雙鏈表 first rlink null first llink null last first 插入操作 q rlink p rlin...

C 學習 第六節

什麼是型別 type 型別在c 中的作用 c 語言的型別系統 變數 物件與記憶體 型別 type 資料型別 性質相同的值得集合 記憶體 內部儲存單元,計算機執行程式的空間 外存 擴充套件儲存器,硬碟 賦值用 判斷用 dynamic 動態字元定義,弱型別的使用方法,c 是強型別程式語言 1 資料型別表...