Vuex基本使用例子(使用dispatch和commit)

搜了一篇文章,踩了坑,重新实践 有坑  在Vuex使用 以及 dispatch和commit来调用mutations的区别

实际生产级开发时,会将Vuex的使用中涉及到actions, mutations 单独写成独立的js文件.此处仅作基本的Vuex学习演示,帮助入门理解.  

 main.js 

import Vue from 'vue'
import App from './App' /* 基本配置,入口模板*/
import Vuex from 'vuex'
import router from './router'

Vue.use(Vuex); //必须的
//演示Vuex的3个基本模块作用,mutations、
const store = new Vuex.Store({
  state: {
    nickName: "",
    cartCount: 0
  },

  mutations: {
    //注意:和action的context.commit("updateUserInfo",agrs)相对应
    updateUserInfo: (state, n) => {
      //debugger
      state.nickName = n;
      //state.nickName = n.nickName;//传递二个参数,形式二
    },
    updateCartCount:(state,cartCount) =>{
      state.cartCount += cartCount;
    },
    increment: (state, n) => {
      state.count += n;
    }
  },
  actions: {
    //Step1: 被Vuex_Demo1.vue的 this.$store.dispatch("updateUserInfo", "xxx"); 
    updateUserInfo(context,agrs) {
      context.commit("updateUserInfo",agrs);//Step2:再去调用mutations中的
    },
    updateCartCount(context) {
      context.commit("updateCartCount");
    },
    increment(context, args) {
      context.commit('increment', args);
    }
  }
})
//Vue的全局模板挂载模式
Vue.prototype.$store = store;

new Vue({
  el: "#app",
  store,
  router,
  components: {
    App
  }, //加载入口模板@/App.vue,与第2行对应
  template: '<App/>'
})

 Vuex_Demo1.vue 

<template>
  <div>
    <h1>Vuex实践之一</h1>
    <a @click="increment">[updateUserInfo]</a>
    <a @click="decrement">[updateCartCount]</a>
    <a @click="adda">[add]</a>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  computed: {},
  created() {},
  mounted() {},
  watch: {},
  methods: {
    increment() {
      //传递二个参数,形式一
      //this.$store.dispatch("updateUserInfo", "nick"); //this.$store.commit("increment", 'nick');
      //传递二个参数,形式二
      this.$store.dispatch({
        type : 'updateUserInfo',
        nickName : 'nick'
      })
      //this.$store.dispatch("updateUserInfo", {aaa: 'aaa', bbb: 'bbb'});
      //this.$store.commit("updateUserInfo" , {aaa: 'aaa', bbb: 'bbb'}) //可以运行,调用mutations中的updateUserInfo
    },
    decrement() {
      this.$store.dispatch("updateCartCount", 1); // this.$store.commit("decrement", 1);
    },
    adda(){
        //触发action
        this.$store.dispatch('increment',5); //vuex第一步,先调actions中对应的方法,
    }
  }
};
</script>

<style scoped>
a {
  cursor:pointer;
}
</style>
原文地址:https://www.cnblogs.com/zhuji/p/13049606.html