接下来做一个mutations的传参讲解

添加学生的例子

第一种传参的方式

<template>
  <div>
	<h3>-----------------------------------这是mutations传参测试--------------------------------</h3>
	<div>
	  {{this.$store.state.students}}//将已经有的学生渲染在这儿
	  <div>
	  	<button @click="addstu">点击添加</button>//绑定添加事件
	  </div>
	</div>
  </div>
</template>

<script>
export default {
  methods: {
  	addstu () {
  	  const newstu = {
  	  	id: 5,
  	  	name: '张国荣',
  	  	age: 44
  	  }//定死一个要添加的学生,这就是要传给mutations的参数
  	  this.$store.commit('addStudent', newstu)
  	  //调用commit方法,更新state的数据,
  	  //第一个参数是mutations里面的方法名,
  	  //第二个参数是传给mutaitons里面addstudent方法的一个参数,
  	  //也就是要新加入的学生
  	}
  }
}
</script>

在vuex.store中接收这个参数

const store = new Vuex.Store({
// 定义的公共变量
  	state: {
  	  count: 1,
  	  students: [
  	    {
  	      id: 1,
  	      name: 'dx',
  	      age: 18
  	    },
  	    {
  	      id: 2,
  	      name: 'yx',
  	      age: 18
  	    },
  	    {
  	      id: 3,
  	      name: 'ym',
  	      age: 32
  	    },
  	    {
  	      id: 4,
  	      name: '刘亦菲',
  	      age: 30
  	    }
  	  ]
  	},
  // state中的变量只能在mutations中通过方法修改
  	mutations: {
  	  changeCount: function (state) {
  	  	state.count++
  	  	console.log('改变了count')
  	  },
  	  addStudent (state, stu) {
  	  	state.students.push(stu)
  	  }//通过这种方式,接收来自组件传过来的新加入的学生
  	},
  	actions: {
  	},
  	getters: {
  	}
})

第二种传参的方式

组件向vuex传参

addstu () {
  	  const newstu = {
  	  	id: 5,
  	  	name: '张国荣',
  	  	age: 44
  	  }
  	  this.$store.commit({
  	  	type: 'addStudent',
  	  	newstu: newstu
  	  })//原先是传入两个参数,现在直接传入一个对象
  	  //type就是需要调用的mutations里面的方法
  	  //newstu就是要求接收的对象,也就是新加入的学生
  	}

vuex接收组件传参

mutations: {
  	  addStudent (state, playload) {
  	  	state.students.push(playload.newstu)
  	  }
  	},

需要注意的是,addstudent接收到的第二个参数是一个完整的对象,所以参数的使用略微有点不同

Logo

前往低代码交流专区

更多推荐