導航:首頁 > 源碼編譯 > vue源碼是啥

vue源碼是啥

發布時間:2023-05-13 22:29:21

1. Vue 組件創建的流程源碼分析

注冊組件第二個參數默認會調用extend,Vue.extend 使用Vue基礎構造器 產生子類
Vue.extend() 中data必須是一個函數,繼承與Vue,可以new和掛載
Vue.component("",Vue.extend({})) //傳入的是對象

這樣復用了同一個對象所以改寫為,這樣new的時候可以拿到全新的對象

因為new Fn的constructor指向的是Parent,所以Sub.prototype需要重寫

———————————————— 分割線 ————————————————————

所以在createElement,需要對組件進行處理(要區分組件和普通元素去創建虛擬節點)

判斷是不是原始的標簽 還是組件的方法

2. vue3.0(雙向綁定)源碼分析

vue3.0雙向綁定相關的模塊有reactive/effect/computed/ref,這篇文章主要聊聊我對它們的理解,以及我在編碼中遇到的問題,希望能給大家帶來幫助,首先,一張圖清弊咐來分析它們之間的依賴關系。

把數據轉化成響應式的數據,獲取/修改數據時,能數據進行劫持操作。vue3.0用的ES6的proxy,在此之前用的是Object.defineProperty。這里有兩個問題需要注意:1/proxy不會對子對象進行劫持,需要遞歸。2/新增數據時,set會執行兩次,是因為length屬性也進行劫持。

利用高階函答純數的思想,把effect弄成一個單獨可用的函數體,在函數體內,執行回調函數並在外部進行一些邏輯處理。在effect文件中,還暴露了track/trigger。當effect中,存在依賴的數據,會調用reactive文件的get方法,get方法調用track,track函數會把storeEffect中的effect用一種格式存儲起來。set方法會調用trigger,trigger會調用get存儲的effect。

依賴effect當數據改變時,觸發當卜舉前的get回調函數,當獲取返回值時,返回當前get回調函數的返回值,當設置時,觸發set回調函數傳遞最新值。這里有點需要注意,這里的有個緩存機制,獲取相同的值時,get回調函數值觸發一次,通過dirty變數實現。

綁定一個非對象類型的數據,直接通過返回對象的get/set方法實現。

項目案例

3. vue源碼分析三 -- vm._render()如何生成虛擬dom

我們在上一篇的最後講解了vm._render是生成虛擬dom的關鍵,那麼我們山鉛來看看他是如何生成的,下面是他的源碼

createElement在文逗歷好件../vdom/create-element裡面,下面是他的源碼

new Vnode 創爛山建的是一個虛擬dom,其實就是一個裝有很多屬性的對象,和真實的dom做一個映射,目的是去渲染真實的dom,那麼為什麼不直接去渲染dom,因為vue中dom不僅有create的過程,還有diff,patch的過程。為了使得diff的過程花費的時間更短,虛擬dom就出來了,下面我們來看看new Vnode的源碼

4. vue2.0源碼解析(上)

vue項目亮雀地鍵鍵信址: https://github.com/vuejs/vue
當前版本號:2.6.11

1、基本稿輪目錄結構:

1、找到initState()函數,這是初始化響應式的入口。

5. vue3源碼解讀--data響應式的處理

目錄

    vue2源碼

    vue3源碼

示例

源碼

    上一節,我們已經看到了組件被掛塌塌載到頁面的流程。但是忽略了對options的處理。vue2中是在組件init過程中就對配置項進行了合並處理,vue3中是在組件創建即setupComponent中執行applyOptions做的這個事情

    經過對組件實例的解析操作,最終拿到的dataOptions即我們實例中的data函數。可以看到,在vue3已經不允許根組件定昌衫敬義為對象了

    顯然reactive即響應式實現的關鍵,順著調用關系找到createReactiveObject函數。常聽人提起的Proxy赫然立於耐慎眼前

    proxy和Object.defineProperty差不多,都可以攔截對象的訪問和修改操作,那麼接下來的重點就是看下它是如何做依賴收集和派發更新的即可

    當前targetType=1,使用baseHandlers做處理器,即createGetter函數。當組件render過程中將會觸發msg的訪問執行到此

    可以看到,如果msg是一個對象,則會遞歸reactive。為什麼要遞歸處理呢?proxy不是已經把整個對象都代理到了嗎?

    寫一個例子看一下

        如果正常訪問,我沒有問題的,每次都可以正確的觸發get

        如果是拿到返回值再進行訪問的話,res.c就是無效的

        把第二個值也轉為Proxy後就可以了

    回到正題,進入track函數

    在trackEffects中完成依賴收集

    同樣的,當set newValue時將執行到createSetter。這將執行trigger進行更新派發

總結

    拿到options的data--視情況(如對象遞歸執行)進行reactive化--在訪問時收集依賴(ReactiveEffect)--設置值時派發更新

    proxy.x相當於讓activeEffect去訂閱data的change,proxy.x = y則相當於data發布更新,通知activeEffect執行componentUpdateFn             --觀察者模式

6. 手把手教你讀Vue2源碼-2

在上一篇中,我們已經學習叢廳了怎麼搭建環境和查找入口文件、vue初始化方法

這一篇,我們就來學習基本的調試方法,在上篇中,我們已經在test文件夾中創建了一個測試文件,畝虛我們在瀏覽器中打開這個文件

1. 初始化new Vue()
test1.html文件中在初始化app處打斷點,按F11走下一步查看,可以看到進入到我們Vue構造函數,調用了init方法

2. this.init(options)
同樣打上斷點,點擊下一步,會進入init方法

3. this.initMixin
在init方法,初始化了各種屬性。我們將斷點打在合並options的位置,查看一下options合並前後有什麼差別:

4. $mount
繼續,迅鄭燃將斷點打到mount方法

5. mountComponent
聲明了updateComponent,創建了Watcher

6. _render()
_render獲取虛擬dom

7. _update()
_update把虛擬dom轉為真實dom

7. Vue到底是什麼

vue是一個構建用戶界面的框架(庫),它的目標是通過盡可能簡單的api實現響應的數據綁定和組合的視圖集合。vue核心是關注視圖層,因此它非常容易學習,非常容易與其它庫或已有項目整合。vue在與相關工具和支持庫一起使用時, 也能很好地驅動復雜的單頁應用。

8. Vue源碼系列之init過程屬性方法變更圖

本文主要擾嘩消是總結在Core目錄下出來的Vue在其實例vm,原型Vue.prototype,構造函數Vue上屬性方法的變更情況,其中樹形圖從左到右為路徑/

vue不但可以在web瀏覽器上運行,也可以在移動端運行,移動端也就是weex版本,兩者區別如下圖

在web上可以分為兩個版本,runtime only版本和runtime+compiler版本,區別是後者緩知帶有模板編譯器,也就是可以將template模板編寫html轉換成render函數,而前者沒有這個功能,需要寫成render形式

另外在體積上,完整版比only版多了蘆如差不多1/2,圖中可以看到,vue.js/vue.min.js是完整版,後者是壓縮完整版基礎上的壓縮版,而vue.runtime.js/vue.runtime.min.js是runtime only版

在源碼中,完整版和only版入口不一樣

這次走的是完整版入口

而在進入core之前,在runtime/index目錄下,做出了下面的增添,也就是web版最外層的公共部分,以後就會在這基礎上修改,從而使最終文件帶有編譯器或者不帶編譯器compiler

下圖開始的就是core/index出來的vue上添加的屬性和方法,分為屬性/方法名+數據類型的組合,已經用不同顏色標記

閱讀全文

與vue源碼是啥相關的資料

熱點內容
非科班程序員自學 瀏覽:799
壓縮泡沫鞋底底材 瀏覽:217
程序員職場第一課2正確的溝通 瀏覽:677
遇到不合法app應該怎麼辦 瀏覽:90
匯編程序編譯後的文件 瀏覽:77
大智慧均線源碼 瀏覽:371
單片機排阻的作用 瀏覽:213
滴滴金融app被下架如何還款 瀏覽:210
jpg轉換成pdf免費軟體 瀏覽:741
范里安pdf 瀏覽:443
偽造pdf 瀏覽:75
能刪除android文件夾嗎 瀏覽:446
LINUX使用V2ray 瀏覽:797
找人幫忙注冊app推廣是什麼 瀏覽:820
獨立伺服器如何恢復初始化 瀏覽:11
優秀到不能被忽視pdf 瀏覽:316
導遊程序員家政 瀏覽:586
22乘28的快速演算法 瀏覽:338
軟通動力程序員節2021 瀏覽:846
安卓系統如何卸載安裝包 瀏覽:870