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去调用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值