Vue.js 源碼分析——模板編譯和組件化

一、 模板編譯
  • 模板編譯介紹:模板編譯的主要目的是將模板(template)轉(zhuǎn)換為渲染函數(shù)(render)
<div>
  <h1 @click="handler">title</div>
  <p>some content</p>
</div>
  • 渲染函數(shù)
render(h){
  return h('div',[
    h('h1',{ on: {click:this.handler } },'title' ),
    h('p','some content')
  ])
}
  • 模板編譯的作用
    • Vue2.x使用VNode描述視圖以及各種交互,用自己編寫的VNode比較復雜
    • 用戶只需要編寫類似HTML代碼 - Vue.js模板,通過編譯器將模板轉(zhuǎn)換為返回VNode的render函數(shù)
    • .vue文件會被webpack在構建的過程中轉(zhuǎn)換成render函數(shù)
二、Vue Template Explorer 網(wǎng)頁工具
  • 將html模板轉(zhuǎn)換為render函數(shù)
三、 模板編譯
image.png
  • 什么是抽象語法樹
    • 抽象語法樹建成AST(Abstract SyntaxTree)
    • 使用對象的形式描述樹形的代碼結(jié)構
    • 此處的抽象語法樹是用來描述樹形結(jié)構的HTML字符串
四、baseCompile -- AST
  • 為什么要使用抽象語法樹
    • 模板字符串轉(zhuǎn)換成AST后,可以通過AST對模板做優(yōu)化處理
    • 標記模板中的靜態(tài)內(nèi)容,在patch的時候直接跳過靜態(tài)內(nèi)容
    • 在patch的過程中靜態(tài)內(nèi)容不需要對比和重新渲染


      image.png
五、 模板編譯過程--總結(jié)
image.png
六、組件化回顧
  • 一個Vue組件就是一個擁有預定義選項的一個Vue實例
  • 一個組件可以組成頁面上的一個功能完備的區(qū)域,組件可以包含腳本、樣式、模板
七、組件注冊
  • 全局組件
  • 局部組件
image.png
八、 Vue.extend
image.png
九、組件的創(chuàng)建過程
image.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容