成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

【Vue原理】生命周期 - 源碼版

siberiawolf / 441人閱讀

摘要:其中的標(biāo)志位什么時(shí)候設(shè)置呢,是在相應(yīng)的鉤子觸發(fā)之后,具體看下面源碼怎么執(zhí)行鉤子呢沒(méi)錯(cuò),就是下面這個(gè)函數(shù)是自己傳入的等回調(diào)那是怎么用呢比如觸發(fā)就會(huì)這么調(diào)用很簡(jiǎn)單不,直接拿到鉤子,然后遍歷執(zhí)行,綁定上下文對(duì)象。

寫(xiě)文章不容易,點(diǎn)個(gè)贊唄兄弟
專(zhuān)注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧
研究基于 Vue版本 【2.5.17】

如果你覺(jué)得排版難看,請(qǐng)點(diǎn)擊 下面鏈接 或者 拉到 下面關(guān)注公眾號(hào)也可以吧

【Vue原理】生命周期 - 源碼版

好的!今天探索Vue的生命周期,鑒于生命周期這個(gè)東西很簡(jiǎn)單,所以直接寫(xiě)源碼版了

簡(jiǎn)單到什么程度呢,就是直接執(zhí)行你的 created 什么的,只是分在什么時(shí)候執(zhí)行而已

但是!我們?nèi)匀灰謨蓚€(gè)問(wèn)題,理清思路方便記憶

1、生命鉤子怎么觸發(fā)
2、生命鉤子在什么時(shí)候觸發(fā)
鉤子怎么觸發(fā)

首先,我設(shè)置了下面的例子

那么 el 和 created 就是你傳入 Vue 的自定義選項(xiàng)啦

1、把所有同類(lèi)鉤子先合并成數(shù)組,然后存放在 vm.$options

這個(gè)點(diǎn)跟 mixins 有關(guān),可以看這篇下對(duì)鉤子的合并處理

【Vue原理】Mixins - 源碼版

合并,主要是為了把全局設(shè)置的鉤子和 組件自定義的鉤子合并起來(lái),就算你沒(méi)有全局鉤子,也要存在數(shù)組里面,比如 created 是下面

vm.$options={
    created:[fn,fn,fn...]
}

2、初始化設(shè)置一些標(biāo)志位,表明是否已經(jīng)完成某種鉤子

function initLifecycle(vm) {
    vm._isMounted = false;
    vm._isDestroyed = false;
    vm._isBeingDestroyed = false;
}

這個(gè)函數(shù)會(huì)在 beforeCreated 鉤子觸發(fā)前調(diào)用,在 Vue.prototype._init 中,下個(gè)問(wèn)題源碼有顯示。其中的標(biāo)志位什么時(shí)候設(shè)置呢,是在相應(yīng)的鉤子觸發(fā)之后,具體看下面源碼

3怎么執(zhí)行鉤子呢

沒(méi)錯(cuò),就是下面這個(gè)函數(shù)

function callHook(vm, hook) {    

    // 是自己傳入的 created 等回調(diào)

    var handlers = vm.$options[hook];    

    if (handlers) {        

    for (var i = 0,j = handlers.length; i < j; i++) {

            handlers[i].call(vm);
        }
    }
}

那是怎么用呢?

比如觸發(fā) created 就會(huì)這么調(diào)用

callHook(vm,"created")

很簡(jiǎn)單4不4,直接拿到鉤子,然后遍歷執(zhí)行,綁定上下文對(duì)象。

為什么是數(shù)組?上面已經(jīng)說(shuō)過(guò)啦,一個(gè)實(shí)例通過(guò)mixins可能有很多個(gè)相同鉤子,所以合并成的數(shù)組

鉤子什么時(shí)候觸發(fā)

要說(shuō)講解鉤子在什么時(shí)候觸發(fā)把,好像也沒(méi)什么講的,Vue文檔都說(shuō)清楚了,但是很顯然,所以我們直接以源碼的形式給出來(lái)

下面就說(shuō)了幾個(gè)鉤子,有幾個(gè)感覺(jué)不太常用,就不列出來(lái)了

function Vue(opt){    

    this._init(opt)

}



Vue.prototype._init(opt){
    ... 合并選項(xiàng)
    ... 設(shè)置初始值 ,事件 等數(shù)據(jù)
    initLifecycle(vm)
    callHook(vm, "beforeCreate");
    ... 初始化選項(xiàng)等數(shù)據(jù)
    callHook(vm, "created");
    ...獲取掛載的DOM 父節(jié)點(diǎn)
    callHook(vm, "beforeMount");
    ...解析模板成渲染函數(shù),并執(zhí)行渲染函數(shù),生成DOM插入頁(yè)面
    vm._isMounted = true;
    callHook(vm, "mounted");
}



// 組件更新時(shí)會(huì)調(diào)用這個(gè)函數(shù)

Vue.prototype._update = function(

    vnode, hydrating

) {    

    if (vm._isMounted) {

        callHook(vm, "beforeUpdate");
    }
    ...重新調(diào)用渲染函數(shù),對(duì)比舊節(jié)點(diǎn)和新節(jié)點(diǎn),得到最小差異,然后只更新這部分頁(yè)面
    callHook(vm, "updated");
}



// 節(jié)點(diǎn)被移除時(shí)會(huì)調(diào)用這個(gè)函數(shù)

Vue.prototype.$destroy = function() {
    callHook(vm, "beforeDestroy");
    vm._isBeingDestroyed = true;
    ...實(shí)例被消除,移除所有 watcher
    vm._isDestroyed = true;
    ...DOM被移除
    callHook(vm, "destroyed");
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105389.html

相關(guān)文章

  • Vue原理】Mixin - 白話

    摘要:而我覺(jué)得現(xiàn)在出一個(gè)白話版,是讓大家有興趣去研究源碼的時(shí)候,可以提前理清一下思路。相當(dāng)于封裝,提取公共部分。顯然,今天我不是來(lái)教大家怎么用的,怎么用看文檔就好了,我是講解生命的真諦內(nèi)部的工作原理。而這個(gè)不會(huì)合并,直接替換掉整個(gè)選項(xiàng) 寫(xiě)文章不容易,點(diǎn)個(gè)贊唄兄弟專(zhuān)注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 Vue版...

    CollinPeng 評(píng)論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥(niǎo)雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門(mén),久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    sutaking 評(píng)論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥(niǎo)雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門(mén),久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    khs1994 評(píng)論0 收藏0
  • Vue面試中,經(jīng)常會(huì)被問(wèn)到的面試題/知識(shí)點(diǎn)(2019改進(jìn))

    摘要:在第一版的基礎(chǔ)上進(jìn)行了優(yōu)化,新增一些面試題知識(shí)點(diǎn),對(duì)一些知識(shí)點(diǎn)進(jìn)行更加深入的描述??梢栽谠撱^子中進(jìn)一步地更改狀態(tài),不會(huì)觸發(fā)附加的重渲染過(guò)程。改變中的狀態(tài)的唯一途徑就是顯式地提交。這兩個(gè)可以在不進(jìn)行刷新的情況下,操作瀏覽器的歷史紀(jì)錄。 在第一版的基礎(chǔ)上進(jìn)行了優(yōu)化,新增一些面試題/知識(shí)點(diǎn),對(duì)一些知識(shí)點(diǎn)進(jìn)行更加深入的描述。 一、對(duì)于MVVM的理解? MVVM 是 Model-View-Vie...

    singerye 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<