VUEX模块化的简单使用
程序员文章站
2024-02-28 11:32:40
...
Vuex模块化的简单实用技巧分享,笔者也是第一次使用,觉得有必要,就记录了一下,如果真的有帮助到你,是我的荣幸
1、目录结构
-|store
-|-|projectName // 项目目录
-|-|-|modules // 模块文件夹
-|-|-|-|modulesA.js // 模块A
-|-|-|-|modulesB.js // 模块B
-|-|-|index.js
2、index.js目录
import Vue from 'vue'
import Vuex from 'vuex'
import modulesA from './modules/modulesA'
import modulesB from './modules/modulesB'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
modulesA,
modulesB
}
})
3、modulesA.js文件
const state = {
name: '模块A'
}
const getters = {
getName(state) {
return `这是${state.name}`
}
}
const mutations = {
updateName(state, data) {
const { name } = data || {}
state.name = name
}
}
const actions = {}
export default {
namespaced: true,
getters,
state,
actions,
mutations
}
4、moduleB.js文件
const state = {
name: 'moduleB',
count: 0
}
const getters = {}
const mutations = {
updateCount(state, data) {
const { count } = data || {}
state.count = count
},
}
const actions = {
setCount(content, { count }) {
const { commit } = content
return new Promise((resolve) => {
setTimeout(() => {
commit('updateCount', { count })
resolve()
}, 500)
})
},
}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}
-
export
要记得加上namespaced: true
这样如果两个模块有同名的方法或数据就可以用模块名来区分。 - 每个模块文件单独写自己的
state
,getters
,actions
,mutations
最后export
出来。
5、在vue文件中使用
<template>
</template>
<script>
/** vuex提供的辅助函数 */
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'
export default {
name: 'test',
data() {
return {}
},
computed: {
/** 引入模块中的state的具体属性 */
...mapState({
name: state => state.moduleA.name,
nameB: state => state.moduleB.name, // 支持起别名
count: state => state.moduleB.count
}),
/** 引入模块中getters的具体计算属性 */
...mapGetters({
getName: 'moduleA/getName'
})
},
mounted() {
/** 使用模块中state */
console.log('name:', this.name)
console.log('nameB:', this.nameB)
/** 输出模块中的getters */
console.log('getName:', this.getName)
/** 提交mutations */
this.updateName({ name: 'test' })
this.updateCount({ count: 1 })
/** 分发actions */
setCount({ count: 2 })
},
methods: {
/** 引入模块中的mutations */
...mapMutations({
updateName: 'moduleA/updateName',
updateCount: 'moduleB/updateCount'
}),
/** 引入模块中的actions */
...mapActions({
setCount: 'moduleB/setCount'
})
}
}
</script>
- 从
vuex
中引入mapState
,mapGetters
,mapActions
,mapMutations
对应的映射出模块中的数据和方法,设置了namespaced: true
后通过moduleA/des
来引用对应模块的数据。