在Vuex中Mutations修改状态操作


Posted in Javascript onJuly 24, 2020

上篇是读取state,这篇是修改状态。即如何操作Mutations。

一. $store.commit( )

Vuex提供了commit方法来修改状态

1.store.js文件

const mutations={
  add(state){
    state.count++
  },
  reduce(state){
    state.count--
  }
}

2.在button上的修改方法

<button @click="$store.commit('add')">+</button>

<button @click="$store.commit('reduce')">-</button>

二. 传值

最简单的修改状态的操作,在实际项目中我们常常需要在修改状态时传值。比如上边的例子,是我们每次只加1,而现在我们要通过所传的值进行相加。其实我们只需要在Mutations里再加上一个参数,并在commit的时候传递就就可以了。我们来看具体代码:

1.store.js

const mutations={
  add(state,n){
    state.count+=n
  },
  reduce(state){
    state.count--
  }
}

2.修改按钮的commit( )方法传递的参数,我们传递10,意思就是每次加10.

<button @click="$store.commit('add',10)">+</button>

<button @click="$store.commit('reduce')">-</button>

三.模板获取Mutations方法

实际开发中我们也不喜欢看到$store.commit( )这样的方法出现,我们希望跟调用模板里的方法一样调用。

例如:@click=”reduce” 就和没引用vuex插件一样。

1.在模板count.vue里用import 引入我们的mapMutations:

import { mapState,mapMutations } from 'vuex'

2.在模板的<script>标签里添加methods属性,并加入mapMutations

methods:mapMutations([
    'add','reduce'
]),

3.在模板中直接使用我们的reduce或者add方法

<button @click="reduce">-</button>

注意:封装起来$store.commit

reduce: function () {
   this.$store.commit('add', 10) // html标签是可以不写this
  }

补充知识:vuex mutations参数传递

接下来做一个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接收到的第二个参数是一个完整的对象,所以参数的使用略微有点不同

以上这篇在Vuex中Mutations修改状态操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
jQuery学习笔记之基础中的基础
Jan 19 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
Oct 10 Javascript
基于JavaScript实现自动更新倒计时效果
Dec 19 Javascript
AngularJS实现表单元素值绑定操作示例
Oct 11 Javascript
node结合swig渲染摸板的方法
Apr 11 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
Vue自动构建发布脚本的方法示例
Jul 24 #Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 #Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 #Javascript
VUE项目axios请求头更改Content-Type操作
Jul 24 #Javascript
vue+axios全局添加请求头和参数操作
Jul 24 #Javascript
vue在响应头response中获取自定义headers操作
Jul 24 #Javascript
vuex存取值和映射函数使用说明
Jul 24 #Javascript
You might like
PHP字符串处理的10个简单方法
2010/06/30 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
python 中文字符串的处理实现代码
2009/10/25 Python
详解supervisor使用教程
2017/11/21 Python
Tornado 多进程实现分析详解
2018/01/12 Python
理论讲解python多进程并发编程
2018/02/09 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
2014新年寄语
2014/01/20 职场文书
工作自我评价怎么写
2014/01/29 职场文书
英语国培研修感言
2014/02/13 职场文书
班组长竞聘书
2014/03/31 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书