1. 程式人生 > >vuex中mapState、mapGetters、mapActions、mapMutations的使用

vuex中mapState、mapGetters、mapActions、mapMutations的使用

第一步:建立store檔案,新增index.js檔案

第二步:安裝Vuex環境npm install vuex --save,引入以下內容

import Vue from'vue'import Vuex from'vuex'import axiosfrom'axios'

第三步:將Vuex作為一個外掛Vue.use(Vuex)

第四步:定義一個容器

let store=new Vuex.Store({

//引數與方法寫在這裡

//定義狀態

state:{//定義在這裡的資料是公用的

  num:10,

  navs:[]

},

getters:{

},

mutations:{

  add(state,playload){

    state.num+=playload.n;

  },

  desc(state,playload){

    state.num-=playload.n

  },

  getNavs(state,playload){//改變state

    state.navs=playload.res

  }

},

actions:{

  getNavs({commit}){//非同步請求  通過mock模擬資料進行後臺請求

    console.log('store this')

    console.log(this)

    console.log(axios)

    axios.get('http://easy-mock.com/mock/59bb998de0dc663341abbf37/http:/easy-mock.com/new/example/1/navs')

      .then((response)=>{

        commit('getNavs',{//觸發mutation

          res:response.data.data

        })

      })

      .catch((error)=>{

        console.log(error)

      })

      }

}

})

第五步:將store釋放出去  export  defaultstore

第六步:main.js中引入store並使用

import storefrom'./store'

new Vue({
  el: '#app'

,
  router,
  store,
  template: '<App/>',
  components: { App }
})

第七步:在要操作的頁面中引入相應的擴充套件物件,編輯相關操作

import {mapState,mapGetters,mapActions,mapMutations}from'vuex'

export default {

      computed:{

        ...mapState({//獲取資料

          num:state=>state.num,

          navs:state=>state.navs

        }),

      },

      methods:{

        //只用mapState  通過$store.commit觸發mutation

        add(){this.$store.commit('add',{n:10})},

        desc(){this.$store.commit('desc',{n:10})},

        //使用mapAction mapMutation

        ...mapMutations({

          add:'add',

        }),

        //getData:function () {this.$store.dispatch('getNavs')}

        ...mapActions({//觸發非同步操作

          getData:'getNavs'

        }),

      },

      created() {

        //觸發一下函式使載入頁面時載入

       this.getData()

      }

    }