vuex梳理

2019-04-22  本文已影响0人  樊小勇
 commit->mutation->state
使用commit直接调用mutation的方法改变state里的值
action->commit->mutation->state
通过使用action派发到commit调用mutation的方法改变state的值

大概的常用知识点如上
下面介绍一些代码中的应用
一个比较完整的vuex文件格式

import Vue from 'vue';
import Vuex from 'vuex';
import login from './modules/login'
import header from './modules/header'
import createPersistedState from 'vuex-persistedstate'
Vue.use(Vuex);

// 导出 store;
export default new Vuex.Store({
    // vuex持久化
    plugins: [createPersistedState()],
    // state(固定)是用来存放数据
    state: {
        // 显示底部
        showFooter: false,
        // 定义一个变量
    },
    // 用来获取state里面的东西
    getters: {
        /* 定义两个对象 里面有对应处理数据的函数 然后通过getters映射出去 mapGetters
         然后可以通过mapGetters访问里面对象
        */
        showFooter: (state) => {
            return state.showFooter;
        },
        // 和上面的写法一样的效果
        lastName:state=>state.lastName
    },
    // mutation用来修改state里的属性值
    mutations: {
        // 改变showFooter的状态(值)
        SHOWFOOTER(state, payload) {
            state.showFooter = payload;
        },
        // 修改名字的mutation
        editLastName(state,payload) {
            state.lastName = payload;
        }
    },
    // 派发,通过action进一步处理mutation里的方法
    actions: {
        // 修改名字的action
        editLastName({commit},payload) {
            commit('editLastName',payload);
        }
    },
    // 模板
    modules: {
        login,
        header
    }
});

里面对应的意思和作用都有备注
关于模板modules,也就是避免一个文件代码过多不便于管理,分成小块来管理
modules一般的结构

export default {
    state: {

    },
    getters: {

    },
    mutations: {

    },
    actions: {

    }
}

getter页面的应用

<template>
  <div>
    <p>
      姓是: 因为getter{{$store.state.lastName}}等同于{{lastName}}
    </p>
    <button @click="changeName">修改lastName</button>
    <router-view></router-view>
  </div>
</template>

<script>
import {mapGetters} from 'vuex';
import { debug } from 'util';
export default {
  // 计算属性
  computed: {
    // 便于访问
    ...mapGetters(['lastName'])

  },
  // 挂载实例之后调用的钩子方法,除开始就调用的方法之外的所有方法放在这个里面
  methods: {
    changeName() {
      // 修改名字,派发action => mutation => state
      this.$store.dispatch('editLastName','gao4');
     // 也可直接使用commit
      this.$store.commit('editLastName','gao4')
    }
  }
};
</script>
<style>
</style>
上一篇 下一篇

猜你喜欢

热点阅读