Vue - Vuex - mutations和devtools

本文详细介绍了Vuex中的mutations概念及其使用方法,包括如何通过commit调用mutations,使用devtools插件进行监控,以及如何传递参数和定义类型常量。强调了在mutations中添加数据的响应式问题,提醒使用Vue.set确保数据响应性。
摘要由CSDN通过智能技术生成


一、mutations介绍

通过mutations来修改状态相关的数据

Vuex的store状态的更新唯一方式 : 提交Mutation

二、mutations的基本使用

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

// 1. 安装插件
Vue.use(Vuex)

// 2. 创建对象
const store = new Vuex.Store({
  // 存放状态相关的数据
  state: {
    counter: 0
  },
  // 通过mutations修改状态相关的数据
  mutations: {
    // 方法, 默认有一个state参数
    increment(state) {
      state.counter++
    },
    decrement(state) {
      state.counter--
    }
  }
})

// 3. 导出
export default store

上述代码在mutations里面增加了两个方法, 用来增加和减小state里面的counter变量

2.1 使用commit访问mutations里面定义的方法

<template>
  <div id="app">
    <home></home>
    <!-- 修改vuex里面的数据 -->
    <button @click="add">+</button>
    <button @click="sub">-</button>
  </div>
</template>

<script>
  import Home from './components/Home.vue'

  export default {
    name: 'App',
    components: {
      Home
    },
    methods: {
      add() {
        // 使用mutations里面定义的increment方法
        this.$store.commit("increment")
      },
      sub() {
        this.$store.commit("decrement")
      }
    },
  }
</script>

<style>
</style>

三、使用devtools插件监听mutations的操作

在这里插入图片描述

四、Mutation主要包括两部分

1 . 字符串的事件类型
2. 一个回调函数, 该回调函数的第一个参数就是state
在这里插入图片描述

五、mutations携带参数

在通过mutation更新数据的时候, 有可能我们希望携带一些额外的参数

参数被称为是mutation的载荷(Payload).

index.js

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

// 1. 安装插件
Vue.use(Vuex)

// 2. 创建对象
const store = new Vuex.Store({
  // 存放状态相关的数据
  state: {
    counter: 100,
  },
  // 通过mutations修改状态相关的数据
  mutations: {
    // 定义一个参数, 让使用者传递
    increCounter(state, coun) {
      state.counter += coun
    }
  }
})

// 3. 导出
export default store

App.vue

<template>
  <div id="app">
    <h2>{{this.$store.state.counter}}</h2>
    <button @click="addCounter(5)">+5</button>
  </div>
</template>

<script>
  import Home from './components/Home.vue'

  export default {
    name: 'App',
    components: {
      Home
    },
    methods: {
      // 定义一个方法, 并传递数据
      addCounter(counter) {
        // 调用store的increCounter方法, 并传递数据
        this.$store.commit("increCounter", counter)
      }
    },
  }
</script>

<style>
</style>

六、mutations的类型常量

为防止类型名字写错, 可以把类型名字抽在一个文件里面, 每次需要的时候再导入

6.1 抽取

mutations-type.js

export const INCREMENT = 'increment'

6.2 使用

index.js

import {INCREMENT} from './mutations-type'

// 2. 创建对象
const store = new Vuex.Store({
  // 存放状态相关的数据
  state: {
    counter: 100,
  },
  // 通过mutations修改状态相关的数据
  mutations: {
    // 方法, 默认有一个state参数
    [INCREMENT](state) {
      state.counter++
    }
  },
})

App.vue

<script>
  import {INCREMENT} from './store/mutations-type'

  export default {
    name: 'App',
    components: {
      Home
    },
    methods: {
      add() {
        // 使用mutations里面定义的increment方法
        this.$store.commit(INCREMENT)
      }
    },
  }
</script>

<style>
</style>

七、如果在mutaions添加数据, 是做不到响应式的

当给state中的对象添加新属性时, 可以使用 Vue.set(obj, 'newProp', 123)

import Vue from 'vue'

export default {
  updateInfo(state) {
    Vue.set(state.info, 'address', '中')
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值