欧美亚洲综合图区在线|天天射天天干国产成卜|99久久免费国产精精品|国产的欧美一区二区三区|日韩中文字幕无码不卡专区|亚麻成人aV极品一区二区|国产成人AV区一区二区三|成人免费一区二区三区视频网站

當(dāng)前位置:首頁 > 軟件開放 > 正文內(nèi)容

vue源碼解析視頻(vuex源碼解析)

軟件開放2年前 (2023-02-06)1017

今天給各位分享vue源碼解析視頻的知識,其中也會對vuex源碼解析進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!

本文目錄一覽:

Vue源碼系列之生命鉤子beforeCreate&created

在實習(xí)面試中,Vue相關(guān)被問到最多的就是圍繞生命周期函數(shù)內(nèi)部所作的一些操作,很多朋友可能了解的就是官網(wǎng)的下圖,有時候倒霉遇上硬核點的面試官,深入問些東西就會被懟的啞口無言,本文就是在之前源碼的基礎(chǔ)上,分析一下,生命周期函數(shù)究竟發(fā)生了什么

先上圖

在分析每個鉤子之間究竟干了什么之前,先來看看鉤子是怎么觸發(fā)的,以第一個鉤子為例

調(diào)用callHook函數(shù)并向其傳入this和'beforeCreate'字符串,那來看看callHook函數(shù)究竟是何方神圣

注意到,該函數(shù)一開始,也就是鉤子函數(shù)進入準(zhǔn)備觸發(fā)前,進行了一個pushTarget()的操作,注釋寫的是“在鉤子函數(shù)觸發(fā)時,禁用依賴收集”,那這個操作是干嘛呢

言歸正傳,禁用了依賴收集后,創(chuàng)建handlers數(shù)組存入合并后options的hook,本例中就是找自定義或者繼承來的beforeCreate鉤子,然后在invokeWithErroeHandling函數(shù)中以此觸發(fā),順序是先觸發(fā)父級,后自己定義的

而這個invokeWithErroeHandling函數(shù)如下

該函數(shù)直接就在內(nèi)部call了鉤子,所以鉤子內(nèi)部的this指向vm實例

以上就是鉤子函數(shù)的觸發(fā)過程,下面來看不同的生命周期之間究竟干了什么

beforeCreate之前

beforeCreate之后到created

1.對于props:合法化,緩存key進數(shù)組方便下次迭代,defineReactive

2.對于data:檢驗props,methods中是否有重名屬性,defineReactive

3.對于methods:代理到vm實例上,方便使用this.method.name調(diào)用

4.對于computed:封裝成watcher并用該watcher的value緩存該計算屬性的value,再在每個計算屬性上劫持一層getter和setter,在第一次調(diào)用getter的時候,取得最新的value,并將依賴緩存下來,之后再依賴不變的前提下,getter只返回watcher的value而不是又去取一遍值,再依賴發(fā)生變化的時候,通知watcher更新,watcher取的最新值作為value,從而實現(xiàn)依賴更新計算屬性才更新

5.對于watch:調(diào)用$watch封裝成一個user watcher,如果有immediate options傳入,就在封裝的時候就調(diào)用一遍callback,有deep options傳進來的話就將該屬性的所有嵌套屬性記為依賴

beforeCreate之前主要是做準(zhǔn)備工作,將該實例的options合并整理出來,再把$那些初始話

created之前就是對options做操作,data,props設(shè)置數(shù)據(jù)劫持,methods代理在vm實例上,computed,watch封裝成不同類型的watcher

asyncComputed源碼解析

在github上面搜索得到大牛已經(jīng)實現(xiàn)了 asyncComputed , 別人捷足先登了。樓主決定先看一遍它的源碼,之后會對他的源碼進行拓展。

1.1.1定義插件 :Vue.js的插件使用的 install() 。這個方法的第一個參數(shù)是Vue構(gòu)造器,第二個參數(shù)是一個可選的對象:

1.1.2使用插件 : Vue通過全局 Vue.use(obj||fn) 來安裝vue的插件

**1.1.3Vue.use結(jié)合install直接使用: **

使用 : app.vue

**配置: ** 我們可以通過Vue.mixin 來混合配置

2.2-1 asyncComputed.js

2.2-2 asyncComputed.js 中的 Vue.mixin({})中的beforeCreate()

這里 beforeCreate() 鉤子函數(shù) 初始化數(shù)據(jù)null,并沒有得到數(shù)據(jù)。

optionData : 得到每一個對應(yīng)實例中的data(函數(shù)或者對象)

this.$options.computed[prefix + key] 給實例的 computed 添加函數(shù) ;

this.$options.data 給Vue實例化組件添加data方法(一個函數(shù),在 created() 的時候執(zhí)行)

2.2-3 asyncComputed.js 中的 Vue.mixin({})中的Created()

vue-quill-editor 巧妙解決視頻樣式問題

這里記錄用 vue-quill-editor 出現(xiàn)的幾個問題:

使用 quill-image-extend-module 擴展組件(上一篇介紹了)

可以針對返回字符串的class進行調(diào)整

quill的視頻在保存的時候會轉(zhuǎn)成 iframe,視頻展示出來的效果不太可控,而且ie瀏覽器的支持不友好,

所以需要改成 video 原生標(biāo)簽;做這件事的方法有兩種,第一種是去替換源碼,找到源碼寫iframe的位置進行重寫,網(wǎng)上資料有人這么干了,但是我看了一下源碼,不太建議;

第二種:用 replace 去替換返回的要顯示的html內(nèi)容

以上是預(yù)覽富文本的內(nèi)容,content 是從后端返回的html內(nèi)容,只要在前端將iframe標(biāo)簽用 video標(biāo)簽替換一下即可;

Vue源碼系列之生命鉤子beforeUpdate&updated

在前面四個生命鉤子執(zhí)行完之后,實例正式走上工作崗位,等待數(shù)據(jù)的變更來進行相應(yīng)的視圖更新,而更新的過程中就會觸發(fā)update相關(guān)鉤子

其實beforeUpdate鉤子之前我們已經(jīng)見過面了,就在mount那一篇

new watcher那里,在watcher構(gòu)造函數(shù)傳入callback updateComponent之外,在options那里傳入了一個before函數(shù),當(dāng)依賴數(shù)據(jù)更新時,就會通知這個watcher更新從而更新頁面,但watcher不會馬上更新,因為在同一個事件循環(huán)里如果出現(xiàn)“把a改成b又將b改成c的操作”,那如果是馬上更新就會update兩次,而如果放在事件隊列里等主線程通知完所有watcher update之后再更新就會把重復(fù)無意義的更新剔除掉

所以updateComponent函數(shù)不會馬上執(zhí)行,而是被添加到一個更新隊列,同樣的,在本輪事件循環(huán)中的所有更新watcher都會被添加到這個隊列

最后調(diào)用的nextTick函數(shù)會保證將flushScheduleQueue這個函數(shù)延時到任務(wù)隊列時執(zhí)行,而這個函數(shù)就是將隊列中所有watcher更新,也就是執(zhí)行run方法

可以看到,在每個watcher執(zhí)行run之前會查看有沒有before函數(shù),也就是上面說到的那個函數(shù),等更新到render watcher也就是mount那時創(chuàng)建的那個watcher,beforeUpdate鉤子觸發(fā)

等到所有watcher更新完后,就會調(diào)用callUpdatedHooks這個函數(shù),在里面找到render watcher,觸發(fā)updated鉤子

但注意到官網(wǎng)有一句話

有朋友就會問了,不是所有的watcher都更新完了嗎?那怎么不敢保證,大膽點,改成能保證

慢著慢著,這樣做bug出現(xiàn)的更大膽,人家那樣說是有理由的

正常的父組件包含同步子組件

生命周期都是

父beforeCreate-父created-父beforeMount-子beforeCreate-子created-子beforeMount-子mounted-父mounted

更新生命周期

父beforeUpdate-子beforeUpdate-子updated-父updated

但還有異步組件啊

此時,父組件遇到異步子組件,如果子組件沒有加載完,就會先跳過,繼續(xù)執(zhí)行自己的生命鉤子,等到加載完后,再強制父組件進行update,所以子組件被重繪一定再updated鉤子之前,但反之則不一定

關(guān)于vue源碼解析視頻和vuex源碼解析的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

掃描二維碼推送至手機訪問。

版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。

本文鏈接:http://landcheck.net/post/7253.html

標(biāo)簽: vue源碼解析視頻

“vue源碼解析視頻(vuex源碼解析)” 的相關(guān)文章

東莞app軟件開發(fā)(東莞app軟件開發(fā)找聚頂科技在)

東莞app軟件開發(fā)(東莞app軟件開發(fā)找聚頂科技在)

今天給各位分享東莞app軟件開發(fā)的知識,其中也會對東莞app軟件開發(fā)找聚頂科技在進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、東莞APP軟件開發(fā)多少錢 2、東莞軟件開發(fā)公司哪家好? 3、app開發(fā)公司哪家好一點? 4、東莞app開發(fā)公司哪家好...

廣東省江門市開平橙子網(wǎng)(廣東省江門市開平市簡介)

廣東省江門市開平橙子網(wǎng)(廣東省江門市開平市簡介)

本篇文章給大家談?wù)剰V東省江門市開平橙子網(wǎng),以及廣東省江門市開平市簡介對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、開平橙子網(wǎng)上的二手手機可信嗎? 2、開平橙子網(wǎng),部落網(wǎng)各大論壇全被封了? 3、從白云機場到江門開平市,該怎么乘車? 4、廣東省開平市有哪幾間證券...

蘋果X如何信任軟件(蘋果x怎么信任一個軟件)

蘋果X如何信任軟件(蘋果x怎么信任一個軟件)

今天給各位分享蘋果X如何信任軟件的知識,其中也會對蘋果x怎么信任一個軟件進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、蘋果X信任設(shè)置在哪里 2、想問蘋果xr信任設(shè)置在哪里 3、蘋果x手機怎么打開信任的開發(fā)者 4、蘋果手機受信任在哪里設(shè)置?...

最新版baby直播APP下載(BABY直播app下載)

最新版baby直播APP下載(BABY直播app下載)

今天給各位分享最新版baby直播APP下載的知識,其中也會對BABY直播app下載進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、798u小寶貝直播怎么下載app 2、愛尚app直播官網(wǎng)怎么下載 3、電流電壓極性對功率方向繼電器的影響 4、大草莓...

源碼編輯器制作大魚吃小魚(大魚吃小魚游戲制作)

源碼編輯器制作大魚吃小魚(大魚吃小魚游戲制作)

今天給各位分享源碼編輯器制作大魚吃小魚的知識,其中也會對大魚吃小魚游戲制作進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、是啥意思 2、孢子是一款什么游戲? 3、聯(lián)想 ThinkPad SL410 筆記本電腦 ,傳奇,大魚吃小魚之類的游戲不能全屏。...

vue優(yōu)點與缺點(請簡述vue優(yōu)勢有哪些)

vue優(yōu)點與缺點(請簡述vue優(yōu)勢有哪些)

本篇文章給大家談?wù)剉ue優(yōu)點與缺點,以及請簡述vue優(yōu)勢有哪些對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、jsp和vue開發(fā)的優(yōu)缺點 2、react和vue的區(qū)別及優(yōu)缺點 3、Web前端主流框架—Vue的優(yōu)缺點分析 jsp和vue開發(fā)的優(yōu)缺點 1、vue優(yōu)點...

星子县| 厦门市| 大兴区| 鹤峰县| 常宁市| 宜都市| 凤庆县| 靖安县| 观塘区| 兴安县| 吐鲁番市| 萍乡市| 江口县| 泌阳县| 休宁县| 阿鲁科尔沁旗| 惠州市| 灵寿县| 怀宁县| 琼海市| 曲水县| 定襄县| 芜湖县| 沈丘县| 廉江市| 修武县| 灌云县| 密山市| 平乡县| 新河县| 巫山县| 临漳县| 格尔木市| 米林县| 通江县| 三江| 涟水县| 乌海市| 青阳县| 缙云县| 磴口县|