vuex—核心概念mutations

在vuex中数据流是单向的,这意味着组件不能直接修改state中的值,就算我们写了默认情况下vue他也不会报错,比如:

button @click="handleAdd">值 + 1</button>


methods:{
     handleAdd (n) {
      // 错误代码(vue默认不会监测,监测需要成本)
       this.$store.state.count++
      // console.log(this.$store.state.count) 
    },
}

但是当我们开启严格模式后vuex会进行报错

那我们如何操作和修改vuex中state的数据呢?
答:通过vuex中的mutations。

一 介绍mutations

state数据的修改只能通过mutations,并且mutations必须是同步(commit)的
如何定义和理解mutation?如下代码

const store  = new Vuex.Store({
  state: {
    count: 0
  },
  	// 定义mutations
  mutations: {
	// 方法里参数 第一个参数是当前store的state属性
    // payload 载荷 运输参数 调用mutaiions的时候 可以传递参数 传递载荷
    addCount (state) {
      state.count += 1
    }
  }
})
//我们使用时mutation时要在组件中进行启动,如
this.$store.commit('addCount')

二 mutations的传参语法

mutations: {
  addCount (state, count) {
    state.count = count
  }
},
//提交mutation 叫mutations起来干活,这里这个10 就被传入到addcount形参count中了
handle ( ) {
  this.$store.commit('addCount', 10)
  
  
//小tips: 提交的参数只能是一个, 如果有多个参数要传, 可以传递一个对象
this.$store.commit('addCount', {
  count: 10,
  id:1
})
}

三 辅助函数=mapMutations

mapMutations和mapState很像,它把位于mutations中的方法提取了出来,我们可以将它导入

import  { mapMutations } from 'vuex'
methods: {
    ...mapMutations(['addCount'])
}
//此时就可以在组件中通过点击事件或者其他进行调用啦
<button @click="addCount">值+1</button>
posted @ 2024-07-28 01:18  AAA晚来秋  阅读(6)  评论(0编辑  收藏  举报