vuex moduls模块化,mutations和actions使用区别

vuex-moduls

在一些项目中vuex需要分成一些各自模块,彼此数据不影响

文件结构:在src/store内新建模块名的文件夹,例: a.js和aa.js 分别是模块a和aa
在这里插入图片描述
其中每个js文件都可以当成一个单独vuex结构来写,在a.js中(aa.js也差不多)

export default {
  namespaced: true,	// 详见后后面的使用方法3
  state: {
    aId: '500'
  },
  mutations: {
    changeId(state,val) {
      state.aId = val
    }
  },
  actions: {
    changeId({commit},val) {
      setTimeout(() => {
        commit('changeId', val)
      },2000)
    }
  },
  getters: {
    getId(state){
      return state.aId
    }
  }
}

在store的index.js中引入并注入模块

import Vue from "vue";
import Vuex from "vuex";
import modulA from "./modulA/a"	// 引入a
import modulB from "./modulA/aa"	//	引入aa
Vue.use(Vuex);

export default new Vuex.Store({
  state: {},
  mutations: {},
  actions: {},
  modules: {
    modulA,	//	注册模块
    modulB 
  }
});

在home.vue中使用:
方法1:

<button @click="changeId('789')"></button>

import { mapGetters, mapActions } from "vuex"

computed: {
	...mapGetters('modulA', ['getId'])
},
methods: {
	...mapActions('modulA', ['changeId'])	//第一个参数为模块名,第二个为引入的方法名
}

方法2:

<button @click="changeId(789)"></button>

import { createNamespacedHelpers } from 'vuex'	//	这里是调用的vuex的api
const { mapGetters, mapActions } = createNamespacedHelpers('modulA')

computed: {
	...mapGetters(['getId'])
},
methods: {
	...mapActions( ['changeId'])
}

方法3:
因为在a.js模块中使用了 namespaced: true ,会在变量名前自动加上模块路径,就不用纠结取名字的困难了。具体使用方法如下

//	访问modulA中state
	this.$store.state.modulA.aId
//	使用modulA中mutations
	this.$store.commit('modulA/changeId', '798')
//	使用modulA中actions
	this.$store.dispatch('modulA/changeId','789')

注:
mutations中只能是同步操作,不能异步,在页面中通过commit调用
actions中可以进行异步操作,例如发起请求之类的,在页面中通过dispatch调用,另外我这actions中的参数使用:({commit}, val) 其实还可以使用(context, val),使用context.commit即可

	actions:{
		getId (context, val){
			contetx.commit('changeId', val)
			// 同时可以采取 context.state和context.getters 访问模块中的state和getters
		}
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值