欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中render函數(shù)調(diào)用時(shí)機(jī)與執(zhí)行細(xì)節(jié)源碼分析

 更新時(shí)間:2022年10月07日 09:40:39   作者:Emiliya  
這篇文章主要為大家介紹了Vue中render函數(shù)調(diào)用時(shí)機(jī)與執(zhí)行細(xì)節(jié)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

摸魚的時(shí)候看到有網(wǎng)友說面試問到了render函數(shù)和beforeMount鉤子哪個(gè)先觸發(fā)的問題,我印象中是先觸發(fā)beforeMount鉤子,不過本著嚴(yán)謹(jǐn)?shù)木?,拒絕印象流,還是去翻了一下Vue2源碼。

想知道結(jié)論可以直接跳到文章末尾。

解析

從$mount方法開始

$mount方法,也就是Vue掛載的起點(diǎn)。

這里可以看到,$mount方法其實(shí)就是調(diào)用mountCompenent并返回執(zhí)行結(jié)果

mountCompenent發(fā)生了什么?

這里截取關(guān)鍵部分

在這里已經(jīng)有結(jié)論了,beforeMount是在render函數(shù)調(diào)用之前觸發(fā)的,不過出于好奇,還是去第七行的_render函數(shù)里面看看細(xì)節(jié)

render函數(shù)的調(diào)用細(xì)節(jié)

轉(zhuǎn)到_render

可以看到_render就是調(diào)用render函數(shù)并返回 vnode。不過在第10行可以發(fā)現(xiàn),調(diào)用render函數(shù)的方式并不是直接調(diào)用,而是通過call方法,第一個(gè)參數(shù)是 render函數(shù)的this環(huán)境,第二個(gè)參數(shù)就是在render函數(shù)中的參數(shù)h。

第一個(gè)參數(shù):vm._renderProxy

從上一部分得知,vm._renderProxy就是render函數(shù)的this環(huán)境,轉(zhuǎn)到相應(yīng)源碼看看。

可以看到,vm._renderProxy要么是vm本身,要么是vm的一個(gè)Proxy,據(jù)Proxy API的支持情況而定。如果是后者,情況就復(fù)雜一些:如果 options.render._withStripped為真,則Proxy的handler為getHandler_1,否則是hasHandler_1??墒沁@個(gè)options.render._withStripped并沒有在Vue源碼中出現(xiàn),最后在負(fù)責(zé)編譯sfc的 compiler-sfc.js中找到了。

// compiler-sfc.js
// mark with stripped (this enables Vue to use correct runtime proxy
// detection)
code += `render._withStripped = true`;

變量code就是sfc編譯后的js代碼,也就是說如果是sfc就是getHandler_1,否則就是hasHandler_1,以上這兩個(gè)handler的代碼就不貼了,不然又是一個(gè)新坑=.=

總而言之,這個(gè)vm._renderProxy就是vm,只不過通過Proxy做了一些特殊處理。

第二個(gè)參數(shù):vm.$createElement

讀過snabbdom的應(yīng)該都認(rèn)識(shí)這個(gè)函數(shù),畢竟vue借鑒了snabbdom。源碼太長就不貼了,只要知道它最終調(diào)用_createElement返回vnode就行。

結(jié)論

  • render函數(shù)的調(diào)用時(shí)機(jī)是在beforeMount之后和mounted之前。
  • 通過call將render函數(shù)的this綁定到了vm,并且會(huì)根據(jù)Proxy的支持情況和是否是SFC來做一些不同的處理。
  • render函數(shù)的參數(shù)h的作用是創(chuàng)建vnode

以上就是Vue中render函數(shù)調(diào)用時(shí)機(jī)與執(zhí)行細(xì)節(jié)源碼分析的詳細(xì)內(nèi)容,更多關(guān)于Vue render函數(shù)調(diào)用執(zhí)行的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vite中的glob-import批量導(dǎo)入的實(shí)現(xiàn)

    vite中的glob-import批量導(dǎo)入的實(shí)現(xiàn)

    本文主要介紹了vite中的glob-import批量導(dǎo)入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Vue精簡版風(fēng)格概述

    Vue精簡版風(fēng)格概述

    本篇文章給大家講解了一下Vue精簡版風(fēng)格的相關(guān)知識(shí)點(diǎn)內(nèi)容以及分享了實(shí)例代碼,有興趣的朋友參考下。
    2018-01-01
  • Vue?props傳遞的類型和寫法分享

    Vue?props傳遞的類型和寫法分享

    這篇文章主要介紹了Vue?props傳遞的類型和寫法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • element組件el-date-picker禁用當(dāng)前時(shí)分秒之前的日期時(shí)間選擇

    element組件el-date-picker禁用當(dāng)前時(shí)分秒之前的日期時(shí)間選擇

    本文主要介紹了element組件el-date-picker禁用當(dāng)前時(shí)分秒之前的日期時(shí)間選擇,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • vue組件屬性(props)及私有數(shù)據(jù)data解析

    vue組件屬性(props)及私有數(shù)據(jù)data解析

    這篇文章主要介紹了vue組件屬性(props)及私有數(shù)據(jù)data解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue打包c(diǎn)hunk-vendors.js文件過大導(dǎo)致頁面加載緩慢的解決

    vue打包c(diǎn)hunk-vendors.js文件過大導(dǎo)致頁面加載緩慢的解決

    這篇文章主要介紹了vue打包c(diǎn)hunk-vendors.js文件過大導(dǎo)致頁面加載緩慢的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 使用vNode實(shí)現(xiàn)給列表字段打標(biāo)簽

    使用vNode實(shí)現(xiàn)給列表字段打標(biāo)簽

    這篇文章主要為大家介紹了使用vNode實(shí)現(xiàn)給列表字段打標(biāo)簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue實(shí)現(xiàn)列表展示示例詳解

    vue實(shí)現(xiàn)列表展示示例詳解

    這篇文章主要為大家介紹了vue實(shí)現(xiàn)列表展示的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 解決ant-design-vue中menu菜單無法默認(rèn)展開的問題

    解決ant-design-vue中menu菜單無法默認(rèn)展開的問題

    這篇文章主要介紹了解決ant-design-vue中menu菜單無法默認(rèn)展開的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue使用video插件vue-video-player的示例

    vue使用video插件vue-video-player的示例

    這篇文章主要介紹了vue使用video插件vue-video-player的示例,幫助大家更好的理解和使用vue插件,感興趣的朋友可以了解下
    2020-10-10

最新評論