【问题标题】:Vuex Module Initialization Best PracticeVuex 模块初始化最佳实践
【发布时间】:2018-05-30 19:54:43
【问题描述】:

(更新了额外的背景)

我有一个 Vuex 存储模块,它需要在开始时自动加载它的数据,所以它在请求时可用(在这种情况下,它是一个“设置”存储,它在启动时从电子设置加载数据,但是有有很多原因我可能需要这样的东西)。

现在我通过在我的 store 模块上设置一个特殊的“init”操作并在“mounted”生命周期钩子上从我的 Main.vue 组件调度它来实现这一点,如下所示:

mounted() {
    this.$store.dispatch('initSettings');
}

我所希望的是一种模块可以简单地进行自我初始化的方式。理想情况下,类似于我的组件上的“已安装”钩子的生命周期钩子,但在 vuex 存储模块中触发。这样我模块的用户就不需要知道他们必须调用“init”以及实例化它。

我已经搜索了文档,但没有找到解决方案,但如果我只是在寻找错误的东西,我希望那里有人找到了一种优雅的方法来做到这一点。

【问题讨论】:

    标签: vue.js vuex vuex-modules


    【解决方案1】:

    如果您的商店位于单独的文件store/index.js 中,您只需导入即可。

    import store from '/store';
    
    store.dispatch("stuff")
    

    这是因为 ES6 导入是引用并绑定到运行时数据结构。以下import store from '/store' 语句将获得与第一个相同的引用。

    require() 进行复制。这是一个显着的区别。

    【讨论】:

      【解决方案2】:

      我需要类似的东西,我的解决方案是在加载文档时运行:

      var app_store = new Vuex.Store({
        state: state,
        getters: getters,
        mutations: mutations,
        actions: actions,  	
      });
      
      $(document).ready(function()
      {  
        app_store.dispatch("initSettings",null); 
      });

      【讨论】:

      • 虽然问题确实是“有没有更好的方法”,但答案似乎是否定的,因此将其标记为正确答案以保持整洁。
      猜你喜欢
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多