gpt4 book ai didi

vue.js - 使用 Nuxt.js 时动态 Vuex 模块初始化的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 06:36:32 25 4
gpt4 key购买 nike

最近,我一直在构建一个使用大量独立 Vuex 模块的大型应用程序。让我们看一下其中一个(例如 support-chat )。支持聊天位于它自己的单独页面上,在初始应用程序加载时使用此模块污染商店将是多余的。我的目标是在加载页面时动态注册此模块。所以我的问题是——我应该在哪里、何时以及如何注册该模块?

我最终在 beforeCreate 中注册了这个模块页面组件的钩子(Hook):

import supportChatModule from '@/vuex/modules/support-chat'

// ...
beforeCreate() {
this.$store.registerModule('support-chat', supportChatModule, { preserveState: process.client })
},
beforeDestroy() {
this.$store.unregisterModule('support-chat')
}
// ...

这种方法有什么陷阱?

如果您能分享您解决该问题的方法,那就太好了。

最佳答案

我为这个问题苦苦挣扎了很长时间。我终于想出了一个独特的方法。
我通过移动 register 来做到这一点和 unregister每页的模块放入router file (router/index.js 在我的项目中)在 beforeEach方法并为每个 path 添加所需的模块.

  • 一些模块在页面之间共享,这就解决了这个问题。
  • 有些模块从服务器接收大量数据,这比留在客户端要好,以避免再次接收到这些数据。我用冰箱做了这个。

  • 这种方法可以改进。
    路由器/index.js

    router.beforeEach((to, from, next) => {

    // unregister modules
    if (from.meta.modules) {
    for (const key in from.meta.modules.primary) {
    if (to.meta.modules && to.meta.modules.primary.hasOwnProperty(key)) {
    continue;
    }
    if (store.state.hasOwnProperty(key)) {
    // don't unregister freeze modules
    if (from.meta.modules.hasOwnProperty('freeze') && from.meta.modules.freeze.find(item => item == key)) {
    continue;
    }
    store.unregisterModule(key);
    }
    }
    }
    // register modules
    if (to.meta.modules) {
    for (const key in to.meta.modules.primary) {
    const module = to.meta.modules.primary[key]();
    if (!store.state.hasOwnProperty(key)) {
    store.registerModule(key, module.default);
    }
    }
    }
    });

    我的路径是这样的:

    {
    path: 'users',
    name: 'users',
    meta: {
    modules: {
    primary: {
    user: () => require('@/store/modules/moduleUser')
    }
    },
    },
    component: () => import('../views/users.vue')
    },

    {
    path: 'foods',
    name: 'foods',
    meta: {
    modules: {
    primary: {
    food: () => require('@/store/modules/moduleFood'),
    user: () => require('@/store/modules/moduleUser')
    },
    freeze: ['food']
    },
    },
    component: () => import('../views/foods.vue')
    },

    关于vue.js - 使用 Nuxt.js 时动态 Vuex 模块初始化的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58845658/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com