mutation vue中更新状态的唯一方式
state: {
counter: 1000,
} mutations: {
//add称为事件类型 从后面的小括号开始叫做回调函数
add(state) {
state.counter++;
}, 使用
<button @click="add()">+</button>
<h2>{{ $store.state.counter }}</h2>
methods: {
// 调用mutations用commit
add() {
this.$store.commit("add");
},
}
commit调用mutation需要传参时
普通提交风格
<button @click="addCount">+5</button> <button @click="addCount">+10</button> addCount(count) { // mutation普通提交风格 this.$store.commit("addCounter", count); } mutations: { addCounter(state, count) { state.counter += count; }, }commit("addCounter",count)里的count可以是上面click中的参数。也可以click时间不传参,click方法中自己定义参数、或者是data中的属性。
特殊提交风格
this.$store.commit({
type: 'addCounter',
stu, //stu: 'stu'
age: 20
})
const stu = {name: 'a',age: 18} 当我们commit是一个对象的时候,就用到了之前说的 mutation方法的方法名被称为事件类型,在这里对应的key就是type,count使用ES6语法为之前定义好的count属性。 addStu(state, payload) {
state.students.push(payload.stu);
},
addStu中第二个参数payload就变成了由commit提交的所有参数组成的对象 如果对在state中没有定义的状态进行操作需要使用Vue.set(),Vue.delete()将他们加入Vue的响应式中
state: {
info: {
name: 'c',
height: '186',
age: 21
}
}
update(state,payload){
// state.info.name = 'q'
// Vue.set()会将传入的属性加入响应式
// 如果只是state.info['address'] = 'HK' 不会加到响应式
// Vue.set(state.info,'address','HK')
// Vue.delete(state.info,'age')
state.info.name = payload
}



京公网安备 11010502036488号