Vuex从入门到实战(三)——使用Mutations变更state中的数据

news/2024/7/24 2:10:45 标签: vue, vuex, mutations

上篇讲到可以通过this.$store.state.count或者...mapState(['count'])的方式可以拿到我们在state中存储的count值,那么如何修改这个值呢?
很多人都会想到this.$store.state.count++,但是这样虽然可以达到目的,却存在很大的隐患——多处修改却无处溯源。
这节我们来认识一下mutations,学习正规操作公共数据的方式。


注:此篇文章案例续上篇

一、Mutation是用于变更Store中的数据。

  1. vuex只能通过mutation变更Store数据,不可以直接操作Store中的数据。

  2. 通过mutation的这种方式虽然操作繁琐了一点,但是却可以集中监控所有数据的变化。在这里插入图片描述

  3. 触发方式:

1. this.$store.commit('XXX')

2. import { mapMutations } from 'vuex'
   ----------------------------------
   methods: {
    // 2.将指定的mutations函数,映射为当前组件的methods函数
    ...mapMutations(['XXX'])
  }

mutations_25">二、计数器实例——带参+两种方式触发mutations

注:还是基于第一篇新建的vuex_demo1项目,本篇使用mutations实现加减一、加减N操作。

在这里插入图片描述

  1. 改动store/index.js——定义mutations
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// new一个Vuex实例并暴露出去
export default new Vuex.Store({
  state: {
    count: 0
  },
  // 1.mutations中第一个参数永远都是自身的state,后面的参数都是形参
  mutations: {
    add (state) {
      state.count++
    },
    // 2.第二个位置的step是我们传递的第一个参数,有其他参数还可以在后面加
    addN (state, step) {
      state.count += step
    },
    sub (state) {
      state.count--
    },
    subN (state, step) {
      state.count -= step
    }
  }
})
  1. 改动Addition组件——第一种方式:$store.commit触发mutations
<template>
    <div>
        <p>当前count的值为:{{ $store.state.count}}</p>
        <button @click="handleAdd()">+1</button>
        <button @click="handleAddN()">+N</button>
    </div>
</template>

<script>
export default {
  data () {
    return {}
  },
  methods: {
    handleAdd () {
      // commit的作用,就是调用某个mutations函数
      this.$store.commit('add')
    },
    handleAddN () {
      this.$store.commit('addN', 3)
    }
  }
}
</script>
  1. 改动Subtration组件——第二种方式:mapMutations触发mutations
<template>
    <div>
        <p>当前count的值为:{{ count }}</p>
        <button @click="handleSub()">-1</button>
        <button @click="handleSubN()">-N</button>
    </div>
</template>

<script>
// 1.从vuex中按需导入mapMutations
import { mapState, mapMutations } from 'vuex'

export default {
  data () {
    return {}
  },
  computed: {
    ...mapState(['count'])
  },
  methods: {
    // 2.将指定的mutations函数,映射为当前组件的methods函数
    ...mapMutations(['sub', 'subN']),
    handleSub () {
      this.sub()
    },
    handleSubN () {
      this.subN(3)
    }

  }
}
</script>

视频地址:https://www.bilibili.com/video/BV1h7411N7bg?p=8


http://www.niftyadmin.cn/n/1486177.html

相关文章

出勤时间

雇员表出勤表中&#xff0c;只有一个字段为上班总工时&#xff0c;需要计算出正常上班工时&#xff0c;缺勤工时和加班工时。 代码 CREATEFUNCTION[dbo].[udf_WorkingHours]( )RETURNSWorkingHoursTABLE([WorkTicketId]INT,[OperatorDate]DATETIME,[NormalWorkTime]DECIMAL(1…

如何安装Vue.js devtools

官方文档&#xff1a; 具体安装vue-devtools步骤&#xff1a; 克隆仓库&#xff0c;我们就直接下载vue-devtoos压缩包&#xff1a;https://github.com/vuejs/vue-devtools【地址所在的分支为dev】 cd 刚下好的文件夹下&#xff0c;我的是vue-devtools-dev【shift右键选择在此…

一个关于组播的网络问题--暂没有时间确定真实原因

操作系统&#xff1a;Debian 3(内核2.6.8-2-686-smp) 网卡&#xff1a;四块网卡&#xff0c;驱动程序为e1000(e1000.ko) 应用程序&#xff1a;在其中一块或者多块网卡上启动heartbeat(向组播地址发包) 现象&#xff1a;heartbeat绑在ethx发送组播&#xff0c;然而ethx没有插网线…

windows上面链接使用linux上面的docker daemon

1. 修改linux 上面的 docker的 配置文件. vim /usr/lib/systemd/system/docker.service 注意 这个是centos的路径 发现ubuntu的路径不一样 可以通过systemctl status docker 来查看具体的配置文件的路径 ubuntu下面直接在 /lib 路径下 不是在/usr 路径下 载EXECSTART后面增加配…

Vuex从入门到实战(四)——Actions实现异步操作

一、Action用于处理异步任务 如果通过异步操作变更数据&#xff0c;必须通过Action&#xff0c;而不能使用Mutation。但是在Action中还是要通过触发Mutation的方式间接变更数据。 只有mutation中定义的函数&#xff0c;才有权利去修改state中的数据&#xff0c;因此actions最…

Vuex从入门到实战(五)——Getters加工处理公共数据

一、Getter Getter用于对Store中的数据进行加工处理形成新的数据。 Getter用于对Store中的数据进行加工处理形成新的数据&#xff0c;类似Vue的计算属性。Store中数据发生变化时&#xff0c;Getter中的数据也会随之变化。【getter不会修改store中的原数据&#xff0c;只是对其…

高效能人士的七个习惯 读书笔记1

刚从当当上买了高效能人士的七个习惯&#xff0c;晚上就看了一晚上&#xff0c;发现这本书还是不错的。 这本书也是属于成功学的范畴&#xff0c;但和常见的成功学书籍不同的地方在于&#xff0c;它并不是去讲一些方法、技巧之类的&#xff0c;而是提倡一些原则性的东西&#x…

Python深度学习之安装theano(windows)

前方预警&#xff1a;windows的坑太多了&#xff0c;抛弃用linux吧 安装theano&#xff0c;提前清空自己的python环境吧&#xff0c;坑太多了&#xff0c;anaconda会自动安装path 一&#xff0c;首先安装python包管理anaconda 下载地址&#xff1a;https://repo.continuum.io/a…