vuex mapState、mapGetters、mapActions、mapMutations的使用

 

例子:vue

 

index.jsvuex

複製代碼
import Vue from 'vue'
import Vuex from 'vuex'
import mutations from './mutations'
import actions from './action'
import getters from './getters'

Vue.use(Vuex)

const state = {
    userInfo: { phone: 111 }, //用戶信息
    orderList: [{ orderno: '1111' }], //訂單列表
    orderDetail: null, //訂單產品詳情
    login: false, //是否登陸
}

export default new Vuex.Store({
    state,
    getters,
    actions,
    mutations,
})
複製代碼
複製代碼
computed: {
            ...mapState([
                'orderList',
                'login'
            ]),
        },   
        mounted(){  
            console.log(typeof orderList); ==>undefind
            console.log(typeof this.orderList)==>object
        }
複製代碼

mapState經過擴展運算符將store.state.orderList 映射this.orderList  這個this 很重要,這個映射直接映射到當前Vue的this對象上。數組

因此經過this都能將這些對象點出來,同理,mapActions, mapMutations都是同樣的道理。牢記~~~app

 

 

 

import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)

export default new Vuex.Store({
  state:{
    data:'test'
  },
  getters:{
    
  },
  mutations:{

  },
  actions:{

  }
})

 

<template>
  <div id="app">
    {{count}}
   //{{data}}
</div> </template> <script> //想要使用 首先須要按需引入 import {mapState,mapGetters,mapMutations,mapActions} from 'vuex' export default { // 經過對象展開運算符將count混入computed對象中,做爲computed對象的方法使用 computed:{ //至關於 // count(){ // return this.$store.state.data // }
  
  //採用對象方式至關於重命名
...mapState({ count: 'data' })
  //採用數組方式
  //...mapState([data])
  //可在其餘鉤子中使用this.data調用   }
//其餘mapGetters,mapMutations,mapActions原理同樣
}
</script>
<style>

</style>

 另外mapState經過擴展運算符將store.state.data映射this.count  這個this 很重要,這個映射直接映射到當前Vue的this對象上。函數

在鉤子函數中可直接 this.count調用this

 

當state,mutations,actions數量不少時,在一個文件夾下不方便管理。可把state,getters,mutations,actions分別寫在不一樣文件內,經過export 導出。再在一個文件中引入。spa

例如:code

//state.js
const state={
  count:10
}
export default state;   //切記記得導出
//getters.js
export const gets= state => state.count   
//這裏直接導出 就不用export default
至關於 gets=function(state){
             return state.count
           }
//mutations.js
const mutations={
  add(state){
    state.count+=1
  },
  sub(state){
    state.count-=1
  }
}

export default mutations;
//actions.js
export const addactions=(context)=>{
  context.commit('add')
}
export const subactions=(context)=>{
  context.commit('sub')
}

 

全部文件導出後在一個文件內統一引入對象

//store文件夾下的store.js
import Vue from 'vue' import Vuex from 'vuex' import state from './state.js'
//因爲上邊的getters.js 和actions.js是經過export 導出每個, import * as getters from './getters.js' import mutations from './mutations.js'
import * as actions from './actions.js' Vue.use(Vuex) export
default new Vuex.Store({ state, getters, mutations, actions })

使用blog

<template>
  <div id="app">
    <div>數量{{count}}</div>
    <div @click="add">增長</div>
    <div @click="sub">減小</div>
  </div>
</template>

<script> import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'

export default {
  computed:{
  //注意這裏能夠直接使用,由於經過...mapxxx引進來,由於是state,因此能夠直接當對象的屬性使用,如果mutations,actions則當對象的方法使用。 ...mapState([
"count"]) }, methods:{ ...mapMutations(["add","sub"]) } } </script>
相關文章
相關標籤/搜索