Vue mixin原理分析

2021-10-09 10:19:38 字數 1368 閱讀 3022

vue在建立元件例項化之前,會將全域性選項和元件選項合併起來,比如全域性component, filter, directive, mixin。也就是說我們全域性註冊的選項會被引入到每個元件中,這樣全域性選項和元件選項就可以合併起來,之後在元件中就可以訪問到全域性選項。比如全域性過濾器等。

為了保證全域性選項不被汙染,但是又不可能每個元件都深度轉殖一遍,這樣會導致全域性選項的開銷過大。

元件合併元件選項和全域性選項的優先順序

元件選項

元件mixin

元件mixin的mixin

元件mixin的…的mixin

全域性選項

元件選項合併的流程

函式合併疊加, 比如data和provide, 如何各個選項中存在重複,那麼優先順序較高的會覆蓋優先順序較低的。

var mixins =;}

};const vm =

newvue(;

}});

陣列疊加, 比如生命週期函式

全域性mixin created

元件mixin-mixin created

元件mixin created

元件options created

對於生命週期,是優先順序較小的先執行。

watch 合併成乙個陣列

全域性mixin watch

元件mixin-mixin watch

元件mixin watch

元件options watch

對於watch,是優先順序較小的先執行

原型疊加,比如components, filters, directives

兩個物件合併的時候,不會相互疊加,而是權重小的被放到權重大的原型上,這樣權重大的訪問快些,因為作用域鏈斷了

a.__proto__ = b;

b.__proto__ = c;

c.__proto__ = d;

覆蓋疊加,比如props, methods, computed, inject

兩個物件合併,如果有重複key, 權重大的覆蓋權重小的,比如

元件props: ;

元件mixin的props: ;

那元件的name會替換mixin中的name

直接替換,比如el, template, propdata

這些屬性只允許存在乙個,所以權重大的會替換掉權重小的

這個好像跟 覆蓋疊加 很像,其實不一樣,覆蓋疊加會把兩個資料合併,重複的才覆蓋。而這個不會合併,直接替換掉整個選項

學習使用 vue mixin

import from utils request const mymix methods async gettypelist this.dealmap const this this retdata.data.list.foreach item async function gettypelist...

vue mixin混入用法

vue中mixin混入用法,通常是將多個元件中的公共部分抽出來,這樣在元件中就可以避免寫重複的 用法 1 建立mixin.js,放入相同的部分,注意這裡是個物件 export const itemlistermixin mounted this.bus.on item image load this...

vue mixin和extends的使用

全域性使用場景 所有子元件內部都與要某乙個state computed或者某個方法時,甚至在所有子元件某個生命週期內都需要執行乙個一樣功能時,都可用全域性mixin 相同生命週期函式會先執行mixin內部的鉤子函式,然後再執行元件內部的鉤子函式,對於state computed或者某個方法時,元件內...