store/index.js
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { msg:"Hello Vuex!", name:"cxj", age:18, hobby:"美女" }, getters: { tenYearsOld(state){ return state.age + 10; }, }, mutations: { changeMsg(state,payload){ console.log("changeMsg mutations"); state.msg = payload; } }, actions: { getMsg({commit},msg){ console.log("changeMsg actions"); setTimeout(() => { commit("changeMsg",msg) }, 2000); } }, modules: { } })App.vue
<template> <div id="app"> {{msg}} <hr /> <button @click="asyncChangeMsg">点我改变msg-async</button> <br /> <button @click="masyncChangeMsg('Hello vuex! mapActions')">点我改变msg-async-mapActions</button> </div> </template> <script> import { mapState, mapActions } from "vuex"; /* Action 类似于 mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态(避免异步带来的状态混乱);Action 可以包 含任意异步操作。 在组件中使用 this.$store.dispatch('xxx') 分发 action,或者使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用(需要先在根节点注入 store) */ export default { name: "App", components: {}, computed: { ...mapState(["msg", "name", "age"]) }, methods: { ...mapActions({ masyncChangeMsg: "getMsg" }), asyncChangeMsg() { this.$store.dispatch("getMsg", "Hello vuex! dispatch"); } } }; </script> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>效果截图-dispatch:
效果截图-mapActions:
