当前位置: 首页 > 知识库问答 >
问题:

多个Vue实例需要多个Vuex模块实例

扈阳辉
2023-03-14

我正在将Vue集成到一个表单网站上,这意味着如果页面上有多个表单,我必须创建Vue应用程序的几个实例。所有实例共享相同的Vuex存储。

我创建了一个Vuex模块,这样每个Vue实例都可以有自己的本地状态。我的主要目标是防止一个Vue实例更新另一个Vue实例的状态。

这是我的Vuex模块

export default {
  state() {
    return {
      stateObj: {...}
    }
  }
}

创建我的Vuex实例:

export default new Vuex.Store({
  modules: {
    form
  }
})

我正在阅读Vuex文档,它说你需要使用一个返回模块状态的函数,这就是我正在做的。但是,当我在一个Vue实例中更新模块状态时,它会更新所有其他Vue实例的模块状态。

以下是我所指的Vuex文档中的部分。

共有1个答案

冯元徽
2023-03-14

发生这种情况的原因是,您没有真正创建表单模块或存储的多个实例。实际上,您正在创建多个Vue应用程序实例,也就是说,您有多个根Vue实例。

但是,您的商店代码清楚地表明,您正在通过导出一个实例来创建Vuex商店的单个实例,例如:导出默认的新Vuex。存储({ /**/ }).

如果您有多个根实例,即多个Vue应用程序,那么您需要Vuex存储的多个实例。你的代码应该是这样的:

// store.js - Note: Do not return singleton store
export default function makeStore() {
  return new Vuex.Store({
    modules: { form }
  });
}

// main.js/root.js
import makeStore from './store.js';

// Creating multiple instances of root instance and Vuex store.
const app1 = new Vue({ store: makeStore() });
const app2 = new Vue({ store: makeStore() });

这应该能解决你的问题。尽管这种设计并不少见,但你还是应该退一步思考一下——如果你需要在所有这些应用程序之间共享数据,该怎么办?由于存在多个实例,因此您无法轻松完成此操作。只要所有这些形式都是独立工作的,就应该是好的。

另一方面,如果你真的要制作你的商店的单一实例,那么考虑改变你的商店设计。您应该有一个根实例/应用程序,并使用v-for生成多个表单。类似地,在存储端,您将有一个数组来维护所有表单的集合。

 类似资料:
  • 然而,在有些情况下的应用程序有一个library或子项目也使用DBFlow来管理其数据库时候。这是一个重要的方案,因为它可以让你在用多个应用程序中重复使的数据库。此前,DBFlow不支持这种用例,并试图这样做的时候会失败。 为了解决这个问题,你必须确保数据库的module被加载。幸运的是,这是一个非常简单的过程。 for KAPT: 通过传递,再把它添加到创建 模块。 最后,指示DBFlow加载包

  • 问题内容: 大多数人似乎建议在不同的端口(6379和6380)上运行单独的Redis实例。为什么在创建第二个数据库时更通常建议这样做?我还没有完全阅读文档,但是大多数示例在连接时并未真正提及“选择Redis数据库”。Ruby客户端的一个示例,nrk / predis的自述文件: 目前,我们正在使用Campfire在办公室中运行Hubot,而我正在为GTalk工作第二个,因为每个Hubot实例只能使

  • 问题内容: 我想在 多个线程* (每个CPU内核一个)中使用 scipy.integrate.ode (或scipy.integrate.odeint)实例,以便一次解决多个IVP。但是文档中说:“此集成器不可重入。您不能同时使用“vode”集成器拥有两个ode实例。 ” * __ (尽管文档未说明,但如果多次实例化,odeint也会导致内部错误。) 知道该怎么办吗? 问题答案: 一种选择是使用(

  • 当我试图创建多个实例时,我遇到了一个问题。 例如: 控制台日志:,仅此而已。不再有了。

  • 我们目前在办公室用营火运行Hubot,我正在为GTalk开发第二个适配器,因为每个Hubot实例只能使用一个适配器。因此,我正在考虑创建第二个Redis数据库或实例,以便隔离两个hubots之间的数据。但是在我深入讨论之前,我想了解为什么要使用单独的实例而不是创建第二个数据库。

  • 本文向大家介绍vue props 一次传多个值实例,包括了vue props 一次传多个值实例的使用技巧和注意事项,需要的朋友参考一下 数组: <custom-element :whatever="[...array]"></custom-element> 对象: <custom-element :whatever="{...obj}"></custom-element> 或者: <custom-