在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 相关文章推荐
JS 文件大小判断的实现代码
Apr 07 Javascript
动态调用CSS文件的JS代码
Jul 29 Javascript
javascript代码加载优化方法
Jan 30 Javascript
JS 按钮点击触发(兼容IE、火狐)
Aug 07 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
js手动播放图片实现图片轮播效果
Sep 17 Javascript
bootstrap flask登录页面编写实例
Nov 01 Javascript
js实现漫天星星效果
Jan 19 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 Javascript
详解小程序如何避免多次点击,重复触发事件
Apr 08 Javascript
微信小程序常用赋值方法小结
Apr 30 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
javascript五图轮播切换实用版
2012/08/17 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python实现简单遗传算法
2018/03/19 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
python time.strptime格式化实例详解
2021/02/03 Python
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
酒店管理自荐信
2013/10/23 职场文书
国际经济贸易专业推荐信
2013/11/06 职场文书
留学经费担保书
2014/05/12 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
主持人开幕词
2015/01/29 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
文艺委员竞选稿
2015/11/19 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL