美文网首页
vuex store笔记

vuex store笔记

作者: _沉默的疯子 | 来源:发表于2020-08-19 13:49 被阅读0次

store/index.js

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

import UserModule from './module/user';

Vue.use(Vuex);

export default new Vuex.Store({
  strict: process.env.NODE_ENV !== 'production',
  state: {
    name: 'name default',
  },
  getters: {
    getName(state) {
      return state.name;
    },
  },
  mutations: {
    // set
    setName(state, val) {
      state.name = val;
    },
  },
  actions: {
    actionDemo(context) {
      context.commit('setName', 'actionsDemo');
      console.log('actionDemo');
    },
    actionDemo1({ commit }) {
      commit('setName', 'commit actionDemo1');
    },
    actionDemo2({ commit }, val) {
      commit('setName', val);
    },
  },
  modules: {
    UserModule,
  },
});

store/module/user.js

export default {
  namespaced: true,
  state: {
    userName: 'andy',
  },
  getters: {
    getUserName(state) {
      return state.userName;
    },
  },
  mutations: {
    setUserName(state, val) {
      state.userName = val;
    },
  },
  actions: {
    userModuleAction({ commit }) {
      commit('setUserName', 'userModuleAction');
    },
    userModuleAction1({ commit }, val) {
      commit('setUserName', val);
    },
  },
};

test.vue

<template>
  <div id="app">
    <!-- <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </div> -->
    <h1>Demo - 1</h1>
    <h3>Name : {{ name }}</h3>
    <h3>getters Name: {{ gettersName }}</h3>
    <button @click="setName">SET NAME</button>

    <h1>Demo - 2 - modules</h1>
    <h3>user name: {{ userName }}</h3>
    <button @click="setUserName">SET USER MODULE NAME</button>

    <h1>Demo - 3 - mapState</h1>
    <h3>name: {{ msName }}</h3>
    <h3>user name: {{ msUserName }}</h3>

    <h1>Demo - 4 - mapMutations</h1>
    <button @click="mpSetName('valll')">mpSetName</button>
    <button @click="mpSetUserName('valll')">mpSetUserName</button>

    <h1>Demo - 5 Actions / mapActions</h1>
    <h3>Actions</h3>
    <button @click="actionsDemo()">actionsDemo</button>
    <button @click="actionsDemo1()">actionsDemo1</button>
    <button @click="actionsDemo2()">actionsDemo2</button>
    <button @click="userActionDemo()">userActionDemo</button>
    <button @click="userActionDemo1()">userActionDemo1</button>

    <h3>mapActions</h3>
    <button @click="mpActionDemo()">actionsDemo</button>
    <button @click="mpActionDemo1()">actionsDemo1</button>
    <button @click="mpActionDemo2('mpActionDemo2')">actionsDemo2</button>
    <button @click="mpUserActionDemo()">mpUserActionDemo</button>
    <button @click="mpUserActionDemo1('mpUserActionDemo1')">
      mpUserActionDemo1
    </button>

    <h3>函数调用 map 系列</h3>
    <button @click="test()">TEST</button>

    <!-- <router-view /> -->
  </div>
</template>

<script>

import { mapState, mapMutations, mapActions } from 'vuex';

export default {
  name: 'App',
  data() {
    return {

    };
  },
  computed: {
    name() {
      return this.$store.state.name;
    },
    gettersName() {
      return this.$store.getters.getName;
    },
    userName() {
      return this.$store.state.UserModule.userName;
    },
    ...mapState({
      msName: (state) => state.name,
      msUserName: (state) => state.UserModule.userName,
    }),
  },
  methods: {
    ...mapMutations({
      mpSetName: 'setName',
      mpSetUserName: 'UserModule/setUserName',
    }),
    setName() {
      this.$store.commit('setName', 'hello');
    },
    setUserName() {
      this.$store.commit('UserModule/setUserName', 'userNameVaule');
    },
    actionsDemo() {
      this.$store.dispatch('actionDemo');
    },
    actionsDemo1() {
      this.$store.dispatch('actionDemo1');
    },
    actionsDemo2() {
      this.$store.dispatch('actionDemo2', 'actinDemo2');
    },
    userActionDemo() {
      this.$store.dispatch('UserModule/userModuleAction');
    },
    userActionDemo1() {
      this.$store.dispatch('UserModule/userModuleAction1', 'userModuleAction1');
    },
    ...mapActions({
      mpActionDemo: 'actionDemo',
      mpActionDemo1: 'actionDemo1',
      mpActionDemo2: 'actionDemo2',
      mpUserActionDemo: 'UserModule/userModuleAction',
      mpUserActionDemo1: 'UserModule/userModuleAction1',
    }),
    test() {
      const str = 'this is test() run';
      this.mpUserActionDemo1(str);
      console.log(str);
    },
  },
};
</script>

相关文章

网友评论

      本文标题:vuex store笔记

      本文链接:https://www.haomeiwen.com/subject/mmirjktx.html