例子: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>