vuex模块批量导入和模块数据、方法调用总结

1.批量导入模块

假设模块目录与 index.js同级
在这里插入图片描述

index.js

import Vue from 'vue'
import Vuex from 'vuex';
Vue.use(Vuex);

//导入modules所有模块
const modulesFiles = require.context('./modules', true, /\.js$/);

const modules={};
modulesFiles.keys().forEach(key => {
    const module= modulesFiles(key).default;
	const moduleName=key.slice(2,-3);//以文件名为模块名,./user.js 截取(user)
    modules[moduleName]=module
});

const store=new Vuex.Store({
	modules,
	
});

export default store

2.调用模块数据和方法

假设user.js模块数据为:

const state = {
	name: '测试'
};
const getters = {
	getName: state => state.name
}
const mutations = {
	SET_NAME(state, val) {
		state.name = val;
	}
};
const actions = {

	setName({commit}, val) {
		return new Promise((resolve, reject) => {
			setTimeout(() => {
				commit('SET_NAME', val);
				resolve()

			}, 100)
		}).catch(err => {
			reject(err)
		})
	}
};

export default {
	namespaced: true,
	state,
	mutations,
	actions,
	getters
};

模块名为:user

(1) 获取user state数据:
方法1:this.$store.state.user.name //测试
方法2:mapState

 import {mapState} from 'vuex';
 export default {
  computed:{
			...mapState('user',['name']),//或...mapState('user',{'userName':'name'}),
			
		},
  created(){
  //调用
     console.log(this.user);//测试   或 this.userName
  }		
}

(2) 获取 user getters
方法1:this.$store.getters[‘user/getName’]
方法2:mapGetters(类似mapState)

computed:{
			...mapGetters('user',['getName']),//或...mapState('user',{'getUserName':'getName'}),
			
		},
  created(){
  //调用
     console.log(this.getName);//测试   或 this.getUserName
  }		

(3) 调用 user mutations

方法1:this.$store.commit(‘user/SET_NAME’,‘修改’)
方法2:mapMutations

     import {mapMutations} from 'vuex';
     export default {
       created(){
        //调用
        this.SET_NAME('修改') //或this.set_name('修改')
     },
       methods:{
         ...mapMutations('user',['SET_NAME']),//或...mapMutations('user',{ set_name:'SET_NAME'})
       }
     }

(4) 调用user actions
方法1:await this.$store.dispatch(‘user/setName’,‘修改’)
方法2:mapActions(类似mapMutations)

  import {mapActions} from 'vuex';
   export default {
    async created(){
        //调用
       await this.setName('修改') //或await this.set_name('修改')
     },
     methods:{
         ...mapActions('user',['setName']),//或...mapMutations('user',{ set_name:'setName'})
       }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值