dvajs-core在vue的實踐

dvajs

dvajs來源于支付寶前端的實踐,基于redux、redux-sagareact-router 的輕量級前端框架

  • dva:基于 react 和 react-router
  • dva-core:僅封裝了 redux 和 redux-saga

如何在vue中使用

  • 注入dispatch、state 到vue組件
  • 訂閱state改變的時候通知vue組件

實現(xiàn)方式

由于不能自定義組件的方法,組件編譯后只會保留生命周期和默認(rèn)的幾個屬性(datamethods、...),所以參考vuex、vuex-router的注入方式,修改組件的beforeCreate達(dá)到注入

// 添加beforeCreate
beforeCreate = ()=> { 
  const store = this.$root.$options.store
  // 添加 dispatch
  this.dispatch = store.dispatch
  // 添加 state 達(dá)到重新賦予值會重新render
  this.$root.constructor.util.defineReactive(this,屬性名字,值)
  // 訂閱 
  store.subscribe(() => {
      ...
      重新賦予值
  })
}

修改組件的生命周期

  • 組件編譯前

可以直接修改componentbeforeCreate的方法,如果beforeCreate方法是對象可以變成數(shù)組,然后再追加

const pushBeforeCreate = (beforeCreate, item) => Array.isArray(beforeCreate)
  ? beforeCreate.concat(item)
  : isFunction(beforeCreate)
    ? [beforeCreate, item]
    : item
 component.beforeCreate = pushBeforeCreate(component.beforeCreate, beforeCreate)
  • 組件編譯后

修改componentbeforeCreate的方法是無效的,需要修改實例化的對象

let _Ctor = component._Ctor[`${Object.keys(component._Ctor)[0]}`]
_Ctor.options.beforeCreate = 
      pushBeforeCreate(_Ctor.options.beforeCreate, beforeCreate)

項目地址:https://github.com/Jetsly/dva-vue

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 摘要: 2016年最火的前端框架當(dāng)屬Vue.js了,很多使用過vue的程序員這樣評價它,“vue.js兼具angu...
    OSC開源社區(qū)閱讀 24,023評論 2 149
  • Vue也已經(jīng)升級到2.0版本了,到現(xiàn)在為止(2016/11/19)比較流行的MVVM框架有AngularJS(也有...
    彬_仔閱讀 27,386評論 12 114
  • 曾經(jīng)看過許多寺廟,見過一些宗教建筑,旅途中聽過不少關(guān)于宗教的傳說,無論是雕塑、壁畫還是傳說,都有一個核心人物,那就...
    何處遇見閱讀 2,263評論 0 0

友情鏈接更多精彩內(nèi)容