在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 Validation插件防止重复提交表单的解决方法
Mar 05 Javascript
javascript 获取页面的高度及滚动条的位置的代码
May 06 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
Aug 13 Javascript
Javascript将JSON日期格式化
Aug 23 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
Vue单页应用引用单独的样式文件的两种方式
Mar 30 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
Apr 13 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
Jun 04 Javascript
vue+element加入签名效果(移动端可用)
Jun 17 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 Javascript
jquery 遍历hash操作示例【基于ajax交互】
Oct 12 jQuery
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
德劲1104的电路分析与改良
2021/03/01 无线电
VOLVO车载收音机
2021/03/02 无线电
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
js replace正则表达式应用案例讲解
2013/01/17 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
Python简易版停车管理系统
2019/08/12 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
Python pip 常用命令汇总
2020/10/19 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
RetroStage德国:复古服装
2019/02/03 全球购物
教育科学研究生自荐信
2013/10/09 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
演讲稿开场白台词
2014/08/25 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers