1.安装
npm install vuex@next --save
npm install vuex@3 --save
2.使用
import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import mutations from './mutations'
import mutations_type from './mutations_type'
import actions from './actions'
import modules from './modules'
Vue.use(Vuex);
const store = new Vuex.Store({
state,
getters,
mutations,
mutations_type,
actions,
modules,
});
export default store;
export default {
num:0,
}
export default {
getNum(state){
return state.num;
}
}
export default {
increase(state,payload){
state.num += payload ? payload : 1;
},
decrease(state){
state.num--;
}
}
export default {
decreaseAsync(context){
context.commit('decrease');
}
}
import users from './users/index'
export default {
users
}
export const MUTATIONS_TYPE = {
INCREASE: 'increase',
DECEREASE: 'decrease',
}
export default {
[MUTATIONS_TYPE.INCREASE](state,payload){
state.num += payload ? payload : 1;
},
[MUTATIONS_TYPE.DECEREASE](state){
state.num--;
}
}
import state from './state'
import getters from './getters'
import mutations from './mutations'
import actions from './actions'
export default {
namespaced:true,
state,
getters,
mutations,
actions,
}
export default {
nickName: "小李",
token: 'sadadasflkjfhdjhjcnxz434nwoonw'
}
<template>
<div class="home">
<div><Son1></Son1></div>
<div><Son2></Son2></div>
<div><Btn></Btn></div>
</div>
</template>
<script>
import Son1 from "./Son1";
import Son2 from "./Son2";
import Btn from "./btn";
export default {
name: "Home",
components: {Btn, Son2, Son1}
}
</script>
<template>
<div>
<button @click="$store.commit('increase')">点击+1</button>
<button @click="$store.commit('increase',2)">点击+2</button>
<button @click="$store.dispatch('decreaseAsync')">点击-1</button>
<button @click="increase()">(第二种)点击+1</button>
<button @click="increase(2)">(第二种)点击+2</button>
<button @click="decreaseAsync()">(第二种)点击-1</button>
</div>
</template>
<script>
import {mapMutations,mapActions} from 'vuex'
export default {
name: "btn",
methods:{
...mapMutations(['increase']),
...mapActions(['decreaseAsync'])
}
}
</script>
<template>
<div class="son1">
<h2>Son1页面的数字:{{$store.getters.getNum}}</h2>
<h2>(第二种)Son1页面的数字:{{num}}</h2>
<h2>{{$store.state.users.nickName}}</h2>
<button @click="changeNikeName()">小李变小贾</button>
</div>
</template>
<script>
import {mapState,mapMutations} from 'vuex'
export default {
name: "Son1",
computed:{
...mapState(['num']),
},
methods:{
...mapMutations({
'changeNikeName':'users/changeNikeName'
}),
}
}
</script>
<template>
<div class="son2">
<h2>Son2页面的数字:{{$store.getters.getNum}}</h2>
<h2>(第二种)Son2页面的数字:{{getNum}}</h2>
</div>
</template>
<script>
import {mapGetters} from 'vuex'
export default {
name: "Son2",
computed:{
...mapGetters(['getNum'])
}
}
</script>