在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 快速结束当前正在执行的动画
Nov 20 Javascript
javascript二维数组转置实例
Jan 22 Javascript
JavaScript事件委托用法分析
Jan 24 Javascript
JavaScript使用cookie实现记住账号密码功能
Apr 27 Javascript
轻松5句话解决JavaScript的作用域
Jul 15 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
react-native 完整实现登录功能的示例代码
Sep 11 Javascript
vue.js语法及常用指令
Oct 29 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
Nov 20 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 Javascript
详解Vue的ref特性的使用
Jan 24 Javascript
vue 动态生成拓扑图的示例
Jan 03 Vue.js
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 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
javascript History对象原理解析
2020/02/17 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
JS实现简易日历效果
2021/01/25 Javascript
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python排序算法实例代码
2017/08/10 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
QML使用Python的函数过程解析
2019/09/26 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
Java中实现多态的机制
2015/08/09 面试题
亲戚结婚的请假条
2014/02/11 职场文书
导游个人求职信
2014/04/25 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
Java Spring Lifecycle的使用
2022/05/06 Java/Android