vuex模块化+命名空间(namespaced)

本文旨在探讨如何在Vuex中实现模块化和使用命名空间,以提高代码的可维护性和数据分类的清晰性。内容包括如何在组件中读取和调用命名空间内的数据,以及进一步的模块化策略,即将相关配置拆分为单独文件进行管理和导入。

目的

让代码更好维护,让多种数据分类更加明确

修改store.js

//求和相关配置
const countOptions = {
    namespaced:true,   //开启命名空间
    actions:{
        addOdd(context,value){
            if(context.state.sum % 2){
                context.commit('ADD',value)
            }
        },
        addWait(context,value){
            setTimeout(() => {
                context.commit('ADD',value)
            }, 1000);
        }
    },
    mutations:{
        ADD(state,value){
            state.sum += value
        },
        SUBT(state,value){
            state.sum -= value
        }
    },
    state:{
        sum:0
    },
    getters:{
        bigSum(state){
            return state.sum*10
        }
    }
}

//人员相关配置
const personOptions = {
    namespaced:true,   //开启命名空间
    actions:{},
    mutations:{
        ADD_PERSON(state,person){
            state.personList.unshift(person)
        }
    },
    state:{
        list:[
            {id:'001',name:'范宁'}
        ]
    },
    getters:{}
}

//创建并暴露(导出)store
export default new Vuex.Store({
    modules:{
        countOptions,
        personOptions
    }
})

开启命名空间后,组件中读取state数据

//方式一:自己直接读取
this.$store.state.personOptions.list
//方式二:借助mapState获取
...mapState('countOptions',['sum'])

开启命名空间后,组件中读取getters数据

//方式一:自己直接读取
this.$store.getters['personOptions/firstPerson']
//方式二:借助mapGetters获取
...mapGetters('countOptions',['bigSum'])

开启命名空间后,组件中调用dispatch

//方式一:自己直接dispatch
this.$store.dispatch('personOptions/addPerson',person)
//方式二:借助mapActions
...mapActions('countOptions',["addOdd","addWait"])

开启命名空间后,组件中调用commit

//方式一:自己直接commit
this.$store.commit('personOptions/ADD_PERSON',person)
//方式二:借助mapMutations
...mapMutations('countOptions',["ADD","SUBT"]),

进一步模块化

可以将每组相关配置都放在单独的js文件中,注意一定要导出,然后再在index.js文件中引入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值