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

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

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

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

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

本文目錄一覽:

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

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

先上圖

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

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

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

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

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

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

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

beforeCreate之前

beforeCreate之后到created

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

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

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

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

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

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

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

asyncComputed源碼解析

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

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

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 : 得到每一個(gè)對應(yīng)實(shí)例中的data(函數(shù)或者對象)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

生命周期都是

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

更新生命周期

父beforeUpdate-子beforeUpdate-子updated-父updated

但還有異步組件啊

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

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

掃描二維碼推送至手機(jī)訪問。

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

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

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

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

軟件開發(fā)培訓(xùn)多少錢(軟件開發(fā)培訓(xùn)課程)

軟件開發(fā)培訓(xùn)多少錢(軟件開發(fā)培訓(xùn)課程)

本篇文章給大家談?wù)勡浖_發(fā)培訓(xùn)多少錢,以及軟件開發(fā)培訓(xùn)課程對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、現(xiàn)在的IT培訓(xùn)大概的費(fèi)用一般都是多少錢? 2、JAVA軟件開發(fā)培訓(xùn)學(xué)出來學(xué)費(fèi)是不是很貴?可以先學(xué)后交費(fèi)?謝謝! 3、程序員培訓(xùn)班要多少錢? 4、學(xué)編程需要...

軟件開發(fā)流程(軟件研發(fā)的流程)

軟件開發(fā)流程(軟件研發(fā)的流程)

今天給各位分享軟件開發(fā)流程的知識,其中也會對軟件研發(fā)的流程進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、軟件開發(fā)過程一般有幾個(gè)階段 2、軟件開發(fā)流程 3、軟件開發(fā)的一般流程是什么?_? 4、軟件開發(fā)的一般流程是什么? 5、軟件開發(fā)怎么去弄?...

cf手游cop357兌換碼(穿越火線cop357兌換碼)

cf手游cop357兌換碼(穿越火線cop357兌換碼)

今天給各位分享cf手游cop357兌換碼的知識,其中也會對穿越火線cop357兌換碼進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、cf手游cdkey兌換碼幾次 2、手游穿越火線cop357怎么能快速領(lǐng)取零件? 3、cf手游cop357怎么得,在線等...

python網(wǎng)站開發(fā)模板(python 網(wǎng)站框架)

python網(wǎng)站開發(fā)模板(python 網(wǎng)站框架)

本篇文章給大家談?wù)刾ython網(wǎng)站開發(fā)模板,以及python 網(wǎng)站框架對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、python web開發(fā) 該用什么框架 2、使用python創(chuàng)建web靜態(tài)網(wǎng)站 3、怎么用python簡單的制作一個(gè)網(wǎng)頁 4、Python 有...

國家商標(biāo)免費(fèi)查詢官網(wǎng)入口(國家商標(biāo)網(wǎng)網(wǎng)上查詢)

國家商標(biāo)免費(fèi)查詢官網(wǎng)入口(國家商標(biāo)網(wǎng)網(wǎng)上查詢)

本篇文章給大家談?wù)剣疑虡?biāo)免費(fèi)查詢官網(wǎng)入口,以及國家商標(biāo)網(wǎng)網(wǎng)上查詢對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、商標(biāo)網(wǎng)查詢?nèi)肟?2、商標(biāo)免費(fèi)查詢?nèi)肟?3、商標(biāo)局官網(wǎng)商標(biāo)查詢? 商標(biāo)網(wǎng)查詢?nèi)肟?商標(biāo)查詢 ;bd_vid=6628772045007563163國家...

手機(jī)瀏覽器顯示不全網(wǎng)頁內(nèi)容(手機(jī)瀏覽器不能顯示全部網(wǎng)頁內(nèi)容)

手機(jī)瀏覽器顯示不全網(wǎng)頁內(nèi)容(手機(jī)瀏覽器不能顯示全部網(wǎng)頁內(nèi)容)

本篇文章給大家談?wù)勈謾C(jī)瀏覽器顯示不全網(wǎng)頁內(nèi)容,以及手機(jī)瀏覽器不能顯示全部網(wǎng)頁內(nèi)容對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、手機(jī)網(wǎng)頁顯示不完整怎么辦? 2、手機(jī)瀏覽電腦版網(wǎng)頁顯示不全 手機(jī)瀏覽電腦版網(wǎng)頁顯示不全怎么辦 3、存龍網(wǎng)站手機(jī)打開不全 4、手機(jī)網(wǎng)頁...