大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 動(dòng)力節(jié)點(diǎn)Vue源碼分析視頻教程

動(dòng)力節(jié)點(diǎn)Vue源碼分析視頻教程

更新時(shí)間:2022-05-09 09:46:14 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1535次

有很多小伙伴都是通過(guò)Vue js視頻教程來(lái)學(xué)習(xí)的,Vue.js 的源碼使用了Flow做靜態(tài)類型檢查,之所以選擇Flow , 是因?yàn)?Babel和 ESlint 都有對(duì)應(yīng)的Flow插件支持語(yǔ)法。

Vue的初始化過(guò)程

Vue的本質(zhì)上就是一個(gè)用Function實(shí)現(xiàn)的Class類,然后它的原型prototypey以及它本身都擴(kuò)展了一系列的方法和屬性。

在 import Vue 的時(shí)候,會(huì)執(zhí)行core 文件夾中的 index.js , 通過(guò) instance文件夾中的index.js文件給Vue的prototype上擴(kuò)展一些方法;通過(guò) initGlobalAPI 方法擴(kuò)展 nextTick 、set、del 等全局靜態(tài)方法。

new Vue的時(shí)候,會(huì)調(diào)用 this._init 方法, 通過(guò)該方法,合并配置、初始化生命周期、初始化事件中心、初始化渲染、初始化data 、props、computed、watcher 等等。初始化最后,檢測(cè)到如果有el 屬性,則調(diào)用 vm.$mount 方法掛載vm, 把模板渲染成最終的DOM 。

$mount 方法 先對(duì) el 做了限制 , Vue 不能掛載在 body 、html 這樣的根節(jié)點(diǎn)上。Vue組件的最后渲染都需要render方法,如果沒有定義render 方法,則會(huì)把 el 或者 template 字符串轉(zhuǎn)換成 render 方法,這個(gè)過(guò)程是Vue的一個(gè)在線編譯過(guò)程,它是通過(guò) compileToFunctions 方法實(shí)現(xiàn)的。

$mount 方法支持傳入兩個(gè)參數(shù),第一個(gè)是 el ,表示掛載的元素,可以是字符串,也可以是DOM對(duì)象,如果是字符串在瀏覽器環(huán)境下會(huì)調(diào)用 query 方法轉(zhuǎn)換成DOM對(duì)象;第二個(gè)參數(shù)是和服務(wù)端渲染相關(guān)。

$mount 方法實(shí)際上調(diào)用的是 mountComponent 方法,mountComponent 方法的核心是先調(diào)用 vm._render 方法生成虛擬DOM , 再實(shí)例化一個(gè)渲染 Watcher (觀察者) , 在它的回調(diào)函數(shù)中會(huì)調(diào)用 updateComponent 方法,最終調(diào)用vm._update更新DOM 。

Watcher 在這里的作用,一是初始化的時(shí)候會(huì)執(zhí)行回調(diào)函數(shù),二是當(dāng) vm實(shí)例中的監(jiān)測(cè)的數(shù)據(jù)發(fā)生變化的時(shí)候執(zhí)行回調(diào)函數(shù)。函數(shù)最后判斷為根節(jié)點(diǎn)的時(shí)候設(shè)置 vm._isMounted 為 true , 表示這個(gè)實(shí)例已經(jīng)掛載了,同時(shí)執(zhí)行 mounted 鉤子函數(shù)。 vm.$vnode 表示 Vue實(shí)例的父虛擬 Node , 為 null 時(shí)表示當(dāng)前是 根Vue 的實(shí)例。

vm._render 方法最終是通過(guò)執(zhí)行 createElement 方法并返回 vnode , 它是一個(gè)虛擬 node ,接下來(lái)通過(guò) vm._update 方法渲染成一個(gè)真實(shí)的DOM并渲染出來(lái)

vm._update 被調(diào)用的時(shí)機(jī)有兩個(gè),一是首次渲染,二是數(shù)據(jù)更新的時(shí)候。vm._update的核心是調(diào)用 vm._patch_ 方法,這個(gè)方法在web 和 weex 平臺(tái)上的定義是不一樣的。 該方法內(nèi)部 調(diào)用 insert 方法把DOM插入父節(jié)點(diǎn)中。

patch的整體流程:createComponent -> 子組件初始化 -> 子組件render -> 子組件patch 嵌套組件的插入順序是先子后父

Vue各組件間合并配置過(guò)程:對(duì)于options的合并方式有2種,子組件初始化過(guò)程通過(guò) initInternalComponent 方式要比外部初始化Vue通過(guò) mergeOptions 的過(guò)程要快,合并完的結(jié)果保留在 vm.$options 中。

源碼中最終執(zhí)行生命周期的函數(shù)都是調(diào)用 callHook 方法

如果大家對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java視頻教程,里面的課程內(nèi)容由淺到深,通俗易懂,適合小白學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲国产综合精品中文第一区 | 激情午夜网 | 欧美一级久久 | 亚洲成在人天堂一区二区 | 午夜在线播放 | 久久精品成人免费看 | 亚洲精品一区二区三区在 | 久久久综合视频 | 国产成人系列 | 久久福利资源站免费观看i 久久高清 | 久久国产精品男女热播 | 国语自产偷拍精品视频偷最新 | 欧美亚洲国产第一页草草 | 天天综合网色 | 亚洲精品国产精品乱码视色 | 欧美日日 | 日本中文字幕二区三区 | 成年人福利网站 | 久久99精品久久久久久青青日本 | 黄色毛片视频 | 成人免费草草视频 | 中文日产国产精品久久 | 欧美观看一级毛片 | 一区二区三区在线播放视频 | 国产精品日本一区二区在线播放 | 免费观看羞羞视频网站 | 伊人三区| 鲁啊鲁在线视频 | 国产欧美国产精品第一区 | 国产欧美日本亚洲精品五区 | 国产精品96久久久久久久 | 日韩视频亚洲 | 日韩中文字幕一区二区不卡 | 成人免费观看高清在线毛片 | 日日夜夜拍 | 波多野结衣视频一区 | 久久精品视频免费在线观看 | 国产亚洲精品看片在线观看 | 久久亚洲国产午夜精品理论片 | 欧美国产亚洲一区二区三区 | 久久久久欧美精品网站 |