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 }