在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 相关文章推荐
javascript 日期时间函数(经典+完善+实用)
May 27 Javascript
JavaScript 获取事件对象的注意点
Jul 29 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
Jul 04 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
vue2.0实现前端星星评分功能组件实例代码
Feb 12 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
ssm+vue前后端分离框架整合实现(附源码)
Jul 08 Javascript
Javascript基于OOP实实现探测器功能代码实例
Aug 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
yii数据库的查询方法
2015/12/28 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
vuex的简单使用教程
2018/02/02 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
js中let能否完全替代IIFE
2019/06/15 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
详解django中使用定时任务的方法
2018/09/27 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
利用python实现周期财务统计可视化
2019/08/25 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
中间件的定义
2016/08/09 面试题
经理秘书岗位职责
2013/11/14 职场文书
销售业务员岗位职责
2014/01/29 职场文书
简历的自我评价范文
2014/02/04 职场文书
三八节主持词
2014/03/17 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
思想道德自我评价2015
2015/03/09 职场文书
法定授权委托证明书
2015/06/18 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python