vuex之modules 热加载(hot update)

store中有属性modules

modules内部可包含多个module,module拥有自己的 state、mutation、action、getter、甚至是嵌套子模块

store中配置modules如下:

export default () => {

    const store = new Vuex.Store({
        state: defaultState,
        mutations: defaultMutations,//同步操作
        getters: defaultGetters,
        actions: {//实现异步操作
            incrementAsync(context, n) {
                //setTimeout(context.commit('increment', n), 2000);
                setTimeout(() => {
                    context.commit('increment', { num1: n })//这里面num1必须在mutations中存在。
                }, 1000)
            }
        },
        modules: {
            a: defaultModuleA
        }
    })
    //hot update---------
    if (module.hot) {
        module.hot.accept([
            './state',
            './mutation',
            './getters',
            './modulea'
        ], () => {
            const newState = require('./state').default
            const newMutation = require('./mutation').default
            const newGetters = require('./getters').default
            const newModuleA = require('./modulea').default

            store.hotUpdate({
                state: newState,
                mutations: newMutation,
                getters: newGetters,
                modules: {
                    a: newModuleA
                },
            })
        })

    }
    return store
}
View Code

modulesa的代码如下:

export default {
    state: {
        aaa: 2222222
    },
    getters: {
        getaaa(state) {
            return state.aaa + "ddd";
        }
    }
}
View Code

这样就实现了store中modules中modulea的热加载,测试是否热加载成功,可以在组件中这样写:

<p>moduleA.state.aaa:{{$store.state.a.aaa}}</p>
<p>moduleA.state.getaaa:{{$store.getters.getaaa}}</p> <!-获取modulea中getters的方法,当然还有其它获取方法,看最后补充!! ->

这里有一点需要注意的是:module中的state属性也是不可以热加载的。

 

补充:module中getters在组件中其它获取方式:

一、modulea中加入属性namespaced;

二、组件中引入

import { mapGetters} from "vuex";
 
//mapGetters有下面两种方式
...mapGetters(["getaaa"]), //当mdulea的namespaced=false
...mapGetters({
getaaa1: "a/getaaa" //当mdulea的namespaced=true
})
 
这样组件中就可以这样获取:
<p>{{getaaa}}</p>//当mdulea的namespaced=false
<p>{{getaaa1}}</p>//当mdulea的namespaced=true

转载于:https://www.cnblogs.com/lixianfu5005/p/9899236.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vuexmodules是用来将store分割成模块的功能。每个模块都有自己的state、mutation、action和getter,并且可以嵌套子模块。\[2\]通过使用modules,可以将应用的状态进行模块化管理,使得代码更加清晰和可维护。在使用modules时,可以将根模块放在modules文件夹的外面,也可以放在里面,最后在index文件中进行整合。\[1\]在index.js文件中,可以通过import语句引入子模块,并在modules对象中进行注册。\[3\]每个子模块都可以有自己的状态参数、mutations、actions和getters,并且可以通过命名空间来进行区分。\[2\]通过使用modules,可以更好地组织和管理vuex的状态。 #### 引用[.reference_title] - *1* *3* [vue - vuex详细讲解和modules模块化的使用](https://blog.csdn.net/qq_43886365/article/details/126893817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [vuex总结(六)——module](https://blog.csdn.net/weixin_47450807/article/details/123104614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值