vuex mutations修改状态

本文详细介绍了Vuex中的Mutation特性,强调Mutation是改变store中状态的唯一方法,它通过同步操作更新状态。文章通过实例展示了如何在模板中使用$store.commit()进行状态变更,以及如何通过mapMutations辅助函数简化模板内的调用。同时,还讨论了如何传递参数到Mutation方法,并给出了完整的代码示例,帮助读者更好地理解和应用Vuex的Mutation功能。
摘要由CSDN通过智能技术生成

vuex的Mutation特性(改变store中状态的唯一方法、执行同步操作)

改变store中state状态的唯一方法就是提交mutation,就很类似事件。

每个mutation都有一个字符串类型的事件类型和一个回调函数,我们需要改变state的值就要在回调函数中改变。

我们要执行这个回调函数,那么我们需要执行一个相应的调用方法:store.commit。

 $store.commit( ) 

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

<template>
    <div>
        <h2>{{msg}}</h2>
        <hr/>
        <h3>{{$store.state.a.count}} = {{count}}</h3>
        <div>
            <button @click="$store.commit('add',10)">+</button>
            <button @click="$store.commit('reduce')">-</button>
        </div>
    </div>
</template>

<script>
import store from '../store'

export default{
  data () {
    return {
      msg: 'Hello Vuex'
    }
  },
  computed: {
    count () {
      return this.$store.state.a.count
    }
  },
  store
}
</script>

传值:

当点击+时,想要count的值加10,可以通过$store.commit("add", 10)

store.js文件

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// state访问状态对象
const state = {
  count: 1
}

// mutations修改状态
const mutations = {
  add (state, n) {
    state.count += n
  },
  reduce (state) {
    state.count--
  }
}


// module模块组
const moduleA = {
  state,
  mutations,
}

export default new Vuex.Store({
  modules: { a: moduleA }
})

模板获取Mutations方法

在实际开发中,我们并不希望$store.commit()方法,而是希望跟调用模板里的方法一样调用

这种实现方式,需要两个步骤

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

import { mapState, mapMutations } from 'vuex'

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

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

完整代码段如下:

<template>
    <div>
        <h2>{{msg}}</h2>
        <hr/>
        <h3>{{$store.state.a.count}} = {{count}}</h3>
        <div>
            <button @click="$store.commit('add',10)">+</button>
            <button @click="$store.commit('reduce')">-</button>
        </div>
        <div>
        <p>
        <button @click="add(10)">add</button>
        <button @click="reduce">add</button>
        </p>
        </div>

    </div>
</template>

<script>
import store from '../store'
import {mapState, mapMutations } from 'vuex'

export default{
  data () {
    return {
      msg: 'Hello Vuex'
    }
  },
  // computed: mapState(["count"]),
  computed: {
    count () {
      return this.$store.state.a.count
    }
  },
  methods: mapMutations(['add', 'reduce']),
  store
}
</script>

简单界面如图:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值