中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue核心面試題實例代碼分析

發布時間:2022-11-24 10:00:33 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

這篇文章主要介紹了vue核心面試題實例代碼分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue核心面試題實例代碼分析文章都會有所收獲,下面我們一起來看看吧。

1-為什么要在列表中綁定key,有什么作用

    組件在升級階段會對兩次vnode做比較,以確定走patchVnode還是create-updateParentPlaceholder-destory過程

vue核心面試題實例代碼分析

    節點比照的條件之一就是key值能否等價

vue核心面試題實例代碼分析

    這意味著,在不帶key值的情況下(即兩次均為undefined),vue有肯定概率(如list列表)會將兩次vnode判斷為sameVnode走patchVnode復用dom節點

    那么,假設當前的需求是選項卡形式,每一個選項卡下都有一個list列表,我們在tab1下的列表1通過點擊綁定了class使其高亮,那么入選項卡切換到tab2后,列表1依然是高亮狀態

2-聊聊vue的雙向數據綁定

    所謂雙向綁定,即數據驅動視圖升級,同時視圖升級又能change到數據變化

    數據——>視圖

    vue的組件創立會經過init過程,這將執行initstate函數對data和props做一次解決,它將遍歷data的key執行observe,這是一次遞歸defineReactive的過程。即對每一個key通過Object.defineProperties設置阻攔,在get時向dep收集watcher,在set時通過dep notify到watcher執行render update

    視圖——數據

    這體現在v-model指令中,我們在input、textarea中輸入的文本能驅動數據的升級。這是由于vue在模板編譯階段將v-model解析成events+props掛載到ast節點上,在patch過程中將會調用updateListeners通過addeventListeners向input增加input事件,當input觸發時將調用事件升級props對應的值,以達到視圖升級的目的

3-聊聊vuex和redux的異同點

    兩者都是響應式編程的狀態管理方案,都很好的處理了嵌套組件的數據傳遞問題,也都是在全局定義store,通過dispatch向reducer派發action以升級store。相比較redux來說,vuex提供了直接連接reducer的方案,即commit

4-在vue中,子組件為何不可以修改父組件傳遞的props,假如修改了,vue是如何監控到并報警告的?

    組件在init過程中會執行initstate函數,這包括了對props的解決

vue核心面試題實例代碼分析

        可以看到,vue通過重寫Object.properties.set方法,當嘗試對props修改時發出警告。這么做是為了保證數據的單項流,避免出錯

5-為什么vue中的mutations中不能有異步操作

    由于異步操作是有反作用的,它的固定輸入不會有固定產出,這將使得程序狀態變得不可預測

6-vue2.x中的Object.definedProperty為什么會在vue3中被Proxy替代

    Object.definedProperty只能劫持對象的屬性,而對于某一個屬性的嵌套則無法劫持,但是Proxy可以,另外就是Proxy提供的可選擇api更豐富

7-Vue組件生命周期

    一個組件的創立,要執行init-mount-reder-patch流程。在init過程中,首先通過callhook調用beforeCreate,接著才是initState,這意味著beforeCreate時組件的狀態是不可用的,但是可以向vuex或者vue-router那樣通過Vue.mixin混入少量插件能力,由于此時的組件尚是"干凈的",避免了對組件造成可能性的干擾;同樣的,因為created是在initState之后,故此時的狀態是可用的,因而我們可以在此向后端發起請求獲取數據并綁定給data.key;在mount過程中將首先執行beforeMount,此時的render函數以及被編譯但尚未執行,故無法進行dom操作;在new Watcher的過程中將會執行到render和update,走patch流程,故mounted時,dom已被創立,因而可以通過ref指令增加dom引用;當我們通過點擊事件觸發data升級時,將會由dep通知到watcher執行run走render update,此時將會執行beforeUpdate,因為此時的dom還未升級,因而我們可以copy一份舊的dom以嘗試做一次回退操作;最后當組件卸載時將會觸發beforeDestory和destoryed,這將遞歸銷毀組件。因為vue的模板解析只會對template中的事件進行解決,因而我們通過ref操作dom增加的事件需要手動進行銷毀

    最后是與keep-alive相關的activited和deactivited,標識組件的激活和凍結狀態

8-vue在v-for時給每個元素綁定事件需要使用事件代理商嗎

    不需要!

    vue對dom的事件監聽是通過dom.addEventListener實現的,對組件的事件解決是通過事件總線完成的

9-vue是如何對數組做響應式解決的?為什么通過下標的方式不行(假設數組為[1,2,3])

    vue會遍歷data的每一個key調用observe,當為數組時,實例化observe

vue核心面試題實例代碼分析

  即調用

vue核心面試題實例代碼分析

    可以看到這會進入新一輪的observe

vue核心面試題實例代碼分析

    對于我們的數組[1,2,3,4]而言,每一個key是基本類型,因而vue直接return,并未對數組的每一個key做響應式解決

    那么數組的響應式又是如何做到的呢,在observe實例化過程中,針對數組調用了protoAugment或者copyAugment方法,這將我們數組的原型鏈指向了arrayMethods對象,該對象通過methodsToPatch進行了重寫

vue核心面試題實例代碼分析vue核心面試題實例代碼分析

    因而,當我們對數組執行push/splice操作時能觸發升級

10-為什么data應該是一個函數

    在init過程中有對data做解決,當為函數時會執行getData通過call語法將this指向當前實例,它將返回一個獨一無二的引用類型

vue核心面試題實例代碼分析

    當組件中存在子組件時,在render過程中將會通過Vue.extend構建子組件構造器,在這一過程中將會對我們的配置項進行合并,假如data不是一個函數,vue會提醒警告

vue核心面試題實例代碼分析

    這是由于,當組件被作為公共組件使用時,對象形式的data會被共享,這意味著,在a處的修改會影響b處的展現

11-nextTick的實現

    當組件升級時會通過dep.notify到watcher的update,這將watcher push進隊列

vue核心面試題實例代碼分析

    并手動調用nextTick,傳入flushSchedulerQueue

vue核心面試題實例代碼分析

    而這實際上是利用了異步api,將我們的回調隊列延后到主線之后執行

vue核心面試題實例代碼分析

12-computed是如何實現的

    computed watcher會對依賴的變化做判斷,只有依賴變化時才會重新計算。我們知道當data中的數據被修改時會觸發watcher的update,這將會把dirty置為true

vue核心面試題實例代碼分析

    那么當在render過程中訪問到computed.key時將會觸發computedGetter,這將觸發computed重新求值

vue核心面試題實例代碼分析

    并在計算后重新置為false

vue核心面試題實例代碼分析

關于“vue核心面試題實例代碼分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“vue核心面試題實例代碼分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

屏边| 昂仁县| 色达县| 晋宁县| 湘潭市| 安徽省| 秦皇岛市| 翁源县| 林甸县| 红原县| 文山县| 临泽县| 阳春市| 长顺县| 浪卡子县| 巨鹿县| 临西县| 河东区| 东港市| 光山县| 汝南县| 兴安盟| 灵寿县| 牟定县| 湘潭市| 霍城县| 江永县| 临邑县| 浑源县| 获嘉县| 大邑县| 呼玛县| 五指山市| 烟台市| 合作市| 奉新县| 内丘县| 浠水县| 曲松县| 玛沁县| 丰宁|