在Vuex中Mutations修改状态操作下详解

在Vuex中Mutations修改状态操作下详解

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

一. $store.commit( )

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

1.store.js文件

立即学习“前端免费学习笔记(深入)”;

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

登录后复制

2.在button上的修改方法

+-

二. 传值

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

1.store.js

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

登录后复制

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

三.模板获取Mutations方法

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

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

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

import { mapState,mapMutations } from ‘vuex’

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

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

登录后复制

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

注意:封装起来$store.commit

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

登录后复制

补充知识:vuex mutations参数传递

接下来做一个mutations的传参讲解

添加学生的例子

第一种传参的方式

  1.  

     

    -------------------这是mutations传参测试-------------------

     

      {{this.$store.state.students}}//将已经有的学生渲染在这儿  

      //绑定添加事件  

      export default { methods: { addstu () { const newstu = { id: 5, name: '张国荣', age: 44 }//定死一个要添加的学生,这就是要传给mutations的参数 this.$store.commit('addStudent', newstu) //调用commit方法,更新state的数据, //第一个参数是mutations里面的方法名, //第二个参数是传给mutaitons里面addstudent方法的一个参数, //也就是要新加入的学生 } }}

登录后复制

在vuex.store中接收这个参数

  1. 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传参

  1. addstu () {   const newstu = {   id: 5,   name: '张国荣',   age: 44   }   this.$store.commit({   type: 'addStudent',   newstu: newstu   })//原先是传入两个参数,现在直接传入一个对象   //type就是需要调用的mutations里面的方法   //newstu就是要求接收的对象,也就是新加入的学生  }

登录后复制

vuex接收组件传参

  1. mutations: {   addStudent (state, playload) {   state.students.push(playload.newstu)   }  },

登录后复制

需要注意的是,addstudent接收到的第二个参数是一个完整的对象,所以参数的使用略微有点不同

相关学习推荐:javascript视频教程

以上就是在Vuex中Mutations修改状态操作下详解的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

点点赞赏,手留余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    编程技术

    深入分析JavaScript的Module模式编程

    2025-3-7 23:33:03

    编程技术

    总结javascript中遍历数组的几种方法

    2025-3-7 23:33:12

    0 条回复 A文章作者 M管理员
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索