總結上圖:vue
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(vuex)
const store = new Vuex.Store({
})
new Vue({
el: '#app',
// 掛載後,全部的組件都會有一個$store
store
})
複製代碼
// 實例化store對象申明數據
new Vuex.Store({
// state 管理數據
state: {
count: 100
}
})
// 在組件中使用:
<template>
<!--直接使用-->
<p>{{$store.state.count}}</p>
<!--經過計算屬性使用-->
<p>{{count}}</p>
</template>
<script>
export default {
computed: {
count () {
return $store.state.count
}
}
}
</script>
複製代碼
mapState
輔助函數幫助咱們生成計算屬性import {mapState} from 'vuex'
export default {
data () {
return {
msg: 'XXX'
}
}
computed: mapState({
// 箭頭函數
count: state => state.count,
// 傳字符串參數'count' 等同於'state => state.count'
count: 'count',
// 在使用state中的數據時,若是依賴組件內部的數據,必須使用常規函數
count(state) {
return state.count + this.msg
}
})
}
複製代碼
computed: mapState(['count']) --->至關於{count: function(state){return state.count}}
複製代碼
computed: {
...mapState(['count'])
}
複製代碼
// 實例化store對象申明: mutation必須同步執行
new Vuex.Store({
// state 管理數據
state: {
count: 100
},
// mutations 修改數據
mutations: {
increment(state) {
// 變動狀態
state.count++
}
}
})
// 在組件中使用:
// 默認提交
methods: {
fn() {
//調用mutations中的increment
this.$store.commit('increment')
}
}
// 提交傳參
mutations: {
increment (state, payload) {
state.count += payload.amount
}
}
複製代碼
this.$store.commit('increment', {
amount: 10
})
複製代碼
import { mapMutations } from 'vuex'
export default {
// ...
methods: {
// 數組寫法
...mapMutations([
'increment' // 將 `this.increment()` 映射爲 `this.$store.commit('increment')`
]),
// 對象寫法
...mapMutations({
add: 'increment' // 將 `this.add()` 映射爲 `this.$store.commit('increment')`
})
}
}
複製代碼
// 在實例化store對象申明:
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
},
// actions 異步操做 獲取後臺數據
actions: {
getData (context) {
setTimeout(()=>{
// 數據獲取成功
context.commit('increment')
},1000)
}
}
})
// 在組件中調用,也能夠提交參數
this.$store.dispatch('getData')
複製代碼
import { mapActions } from 'vuex'
export default {
// ...
methods: {
...mapActions([
'getData', // 將 `this.increment()` 映射爲 `this.$store.dispatch('getData')`
]),
...mapActions({
add: 'getData' // 將 `this.add()` 映射爲 `this.$store.dispatch('getData')`
})
}
}
複製代碼