vuex的使用之mapMutations、mapState、mapActions

store.js文件如下:

import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
    state: {
        token: "",
        showPopup: false,
        popupOption: {
            title: "标题",
            name: "",
            query: {},
            popupType: "", // 弹框类型 titleLeft 为标题在左边的那种弹框
        },
        level3Name: '' // 三级指标标题
    },
    getters: {
        getToken: (state) => state.token, //获取token
    },
    mutations: {
        SET_TOKEN: (state, token) => {
            state.token = token;
        },
        SET_SHOW_POPUP: (state, show) => {
            state.showPopup = show;
            if (!show) {
                state.popupOption = {
                    title: "标题",
                    name: "",
                    query: {},
                    popupType: "",
                };
            }
        },
        SET_POPUP_OPTION: (state, option) => {
            state.popupOption = option;
        },
        SET_LEVEL3_NAME: (state, name) => {
            state.level3Name = name;
        }
    },
   actions:{
        SET_NAME(content,show){
            content.commit('SET_SHOW_POPUP',show)
        }
    }
});

1.如果一个状态值或多个状态值需要在多个页面和组件中使用,那么可以使用mapState。

(1)在需要的组件内引入

import { mapState } from 'vuex';

(2)在组件计算属性里使用

computed: {
    ...mapState(['showPopup', 'popupOption']),
    current () {
      return this.popupOption.name
    }
  },

 2.如果一个方法或多个方法需要在多个页面和组件中使用,那么,可以使用mapMutations

(1)在需要的组件内引入

import { mapMutations } from 'vuex';

 (2)在组件methods里使用

methods: {
    ...mapMutations(['SET_SHOW_POPUP']),
    coloePopup() {
      this.SET_SHOW_POPUP(false)
    }
  },

 3.如果一个方法或多个方法需要在多个页面和组件中使用,也可以使用mapActions

 (1)在需要的组件内引入

import { mapActions } from 'vuex';

 (2)在组件methods里使用

methods: {
    ...mapActions(['SET_NAME']),
   handName(){
       this.SET_NAME(false)
    }
  },

总的来说使用了它们就不用传统的this.$store.state去获取状态值,也不用this.$store.commit()或者this.$store.dispatch()。可以直接用this去调用了。

猜你喜欢

转载自blog.csdn.net/weixin_53474595/article/details/129527038