zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Pascal 语言中的关键字及保留字
    单元文件结构
    在 case 语句中使用字符串-转
    程序流程的辅助控制-转
    XE版本 InputQuery 可以同时填多个输入值
    转:Delphi 6 实用函数
    转:Delphi 函数大全
    d 属性: 赋予字段执行动作的能力
    Json格式示意图
    转:虚拟方法跳过父类继承调用祖父类的代码 --值得试一试
  • 原文地址:https://www.cnblogs.com/lixianfu5005/p/9899236.html
Copyright © 2011-2022 走看看