<template>
<div>
<h2>当前求和为:{{sum}}</h2>
<h2>当前求和放大10倍后为:{{bigSum}}</h2>
<h2>我在:{{school}},学习{{subject}}</h2>
<h3 style="color:red">Person组件的总人数为{{personList.length}}</h3>
<select v-model.number="num">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<button @click="increment(num)">+</button>
<button @click="decrement(num)">-</button>
<button @click="incrementOdd(num)">当前求和为奇数再加</button>
<button @click="incrementWait(num)">等一等再加</button>
</div>
</template>
<script>
import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
export default {
name: 'Count',
data () {
return {
num:1,
}
},
computed: {
...mapGetters(['bigSum']),
...mapState(['sum','school','subject','personList']),
},
methods: {
...mapMutations({increment:'ADD',decrement:'JIAN'}),
...mapActions({incrementOdd:'addOdd',incrementWait:'addWait'}),
},
mounted() {
}
}
</script>
<style lang="css">
button {
margin-left: 5px;
}
</style>
<template>
<div>
<h1>人员列表</h1>
<h1 style="color:red">Count组件的和为:{{sum}}</h1>
<input type="text" placeholder="请输入名字" v-model="name">
<button @click="add">添加</button>
<ul>
<li v-for="p in personList" :key="p.id">{{p.name}}</li>
</ul>
</div>
</template>
<script>
import { nanoid } from 'nanoid';
export default {
name:'Person',
data () {
return {
name:''
}
},
methods: {
add() {
const personObj = {id:nanoid(),name:this.name}
this.$store.commit('ADD_PERSON',personObj);
this.name = '';
}
},
computed: {
personList() {
return this.$store.state.personList;
},
sum() {
return this.$store.state.sum;
},
}
}
</script>
<style>
</style>
<template>
<div>
<Count></Count>
<hr />
<Person></Person>
</div>
</template>
<script>
import Count from './Count.vue'
import Person from './Person.vue'
export default {
name:'App',
components: {Count,Person},
}
</script>
<style>
</style>
import Vue from 'vue'
import Vuex from 'vuex'
const actions = {
addOdd(context, value) {
console.log('actions中的addOdd被调用了');
if (context.state.sum % 2) {
context.commit('ADD', value);
}
},
addWait(context, value) {
console.log('actions中的addWait被调用了', context, value);
setTimeout(() => {
context.commit('ADD', value);
}, 50)
}
}
const mutations = {
ADD(state, value) {
console.log('mutation中的ADD被调用了', state, value);
state.sum += value;
},
JIAN(state, value) {
console.log('mutation中的JIAN被调用了', state, value);
state.sum -= value;
},
ADD_PERSON(state, value) {
console.log('mutations中的ADD_PERSON被调用了~');
state.personList.unshift(value);
},
}
const state = {
sum: 0,
school: '尚硅谷',
subject: 'web前端',
personList: [
{ id: '001', name: 'yh', age: 18 }
]
}
const getters = {
bigSum(state) {
return state.sum * 10
}
}
Vue.use(Vuex)
export default new Vuex.Store({
actions,
mutations,
state,
getters
})
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4673237293d79f20b65dfc0619cfa9e5.png)