Vue使用mixin分發組件的可複用功能

vue創建高階組件的實現不夠react優雅,但那是vue和react的設計思想導致的。在react中一切都是函數,而在vue中,組件最終都是函數,但在開發時可以是JSON對象,而且每個vue組件要注意三個點:props、events和slots,就是這三個導致vue創建高階組件時要傳入相應的屬性,較react要複雜。
vue官方推薦使用mixins來完成高階組件的功能,如果對vue實現高階組件有興趣的話推薦看[vue實現高階組件][1]
下面是vue官網使用mixins的例子:
// 定義一個混入對象
var myMixin = {
  created: function () {
    this.hello()
  },
  methods: {
    hello: function () {
      console.log('hello from mixin!')
    }
  }
}

// 定義一個使用混入對象的組件
var Component = Vue.extend({
  mixins: [myMixin]
})

var component = new Component() // => "hello from mixin!"

每個vue組件有mixins屬性接收mixin數組,但由於mixin與組件,mixin與mixin之間存在屬性命名衝突的問題,vue解決這個的方式是:
1 數據對象在內部會進行遞歸合併,並在發生衝突時以組件數據優先。
2 值爲對象的選項,例如 methods、components 和 directives,將被合併爲同一個對象。兩個對象鍵名衝突時,取組件對象的鍵值對。
3 Vue.extend()和new Vue()創建的組件,解決上述的命名衝突的方案是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章