解決mpvue + vuex 開發微信小程序,vuex輔助函數mapState、mapGetters不可用問題

前言

最近博主正在用微信小程序開發一款網上商城系統。恰好趕上了美團開源的小程序開發框架mpvue。該框架繼承了vue.js的特性,用起來還是蠻爽的。然後在開發中,數據倉庫這塊懵逼了, 引入的vuex的輔助函數mapState、mapGetters、mapMutations、mapActions等怎麼就不能用呢。苦惱之際打開D盤,一番愉悅之後,終於想通啦…

問題分析

  • vuex輔助函數
    首先簡單說一下vuex的輔助函數mapState、mapGetters、mapMutations、mapActions,我們在子組件經常用到很多狀態量,爲了避免過分的使用this.$store.state.xxxthis.$store.dispatch導致的冗餘問題,我們用輔助函數來使代碼變得簡潔易讀。注意了,它就相當於語法糖似的,實際上還會映射爲this.$store.吧啦吧啦

  • vue-cli + vuex項目
    在一般的vue-cli + vuex項目中,主函數 main.js 中會將 store 對象提供給 “store” 選項,這樣可以把 store 對象的實例注入所有的子組件中,從而在子組件中可以用this.$store.state.xxxthis.$store.dispatch 等來訪問或操縱數據倉庫中的數據

    new Vue({
    el: '#app',
    store,
    router,
    template: '<App/>',
    components: { App }
    })
  • mpvue + vuex項目
    注意了,在mpvue + vuex項目中,很遺憾不能通過上面那種方式來將store對象實例注入到每個子組件中(至少我嘗試N種配置不行),也就是說,在子組件中不能使用this.$store.吧啦吧啦,從而導致輔助函數不能正確使用。這個時候我們就需要換個思路去實現,要在每個子組件中能夠訪問this.$store才行。

解決辦法

這裏呢,博主使用的方法很簡單,既然我們需要在子組件中用this.$store 訪問store實例,那我們直接在vue的原型上添加$store屬性指向store對象不就行啦,抱着試一試的心態寫了下面這行代碼。

Vue.prototype.$store = store

這樣一來我們在子組件中便可以用this.$store訪問對象。確實也解決了輔助函數不能使用的問題。

來自某切圖仔的低沉怒吼

原本是準備吐槽設計師的,結果被每個某個平胸小蘿莉給吐槽了一頓審美,沒啥別的,祝她永遠年輕態

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