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

2023-12-21

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

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

这是我的 Vuex 模块

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

创建我的 Vuex 实例:

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

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

这是section https://vuex.vuejs.org/guide/modules.html#module-reuse在我提到的 Vuex 文档中。


发生这种情况的原因是您并没有真正创建多个实例form模块或您的商店。您本质上是在创建 Vue 应用程序的多个实例,也就是说,您有多个根 Vue 实例.

但是,您的商店代码明确表明您正在通过导出如下实例来创建 Vuex 商店的单个实例:export default new Vuex.Store({ /**/ }).

如果您有多个根实例,即多个 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生成多种表格。同样,在商店方面,您将有一个数组来维护所有表单的集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个 Vue 实例需要多个 Vuex 模块实例 的相关文章

  • 如何使用 Vue 路由器从 Vuex 操作进行导航

    我正在使用 Vue 2 x 和 Vuex 2 x 创建一个 Web 应用程序 我正在通过 http 调用从远程位置获取一些信息 我希望如果该调用失败 我应该重定向到其他页面 GET PETS state gt return http get
  • 如何在vue中覆盖materializecss sass变量?

    我想改变物化中的变量 变量 scss https github com Dogfalo materialize blob master sass components variables scss e g primary color col
  • 超出最大调用堆栈大小 - Vue.js

    我有一个计算方法 可以让我计算产品的总价和折扣值 并希望获得以下值 总计 折扣 cartTotal var total 0 var discount Math round 0 1 this cartTotal 100 100 this ca
  • 我在 firebase.auth.ApplicationVerifier 中遇到问题

    错误发生在signInWithPhoneNumber 的第二个参数中 我无法解决这个问题 我使用了三种方法来发送 otp 验证 otp 和最后用于验证码 methods sendOTP e e preventDefault if this
  • Vue Chart.js - 数据变化时图表不更新

    我正在使用 Vue js 和 Chart js 绘制一些图表 每次我调用该函数时generateChart 图表不会自动更新 当我在 Vue Devtools 中检查数据时 它们是正确的 但图表没有反映数据 但是 当我调整窗口大小时 图表确
  • #NUXT.JS 中常用组件方法的存储位置

    实际上我想知道 NUXT JS 中常见组件方法的存储位置 我尝试过的事情 gt 在中间件中存储公共代码 它没用 因为据我所知 中间件只能处理对服务器的请求和响应 methods states methods SwitchManager fu
  • 如何预渲染多个Vue应用页面?

    我正在尝试 未成功 在使用 Vue CLI 搭建的同一项目中预渲染多个 Vue 应用程序的 HTML 由于多种原因 我不想使用 Vue Router 或 Nuxt 等 我尝试过使用预渲染 Spa 插件 https github com ch
  • 观察数组中当前值的变化

    每当它改变半径和中心时 我想监视每个项目 每当它改变时 我想 console log 项目索引和值 let map ref null map value circles是一个数组 当我使用此监视功能时 它仅在加载时显示一次值 我希望每次它在
  • 覆盖 vuetify 中的 scss 变量

    为了增加 vuetify 的 v switch 的宽度 我想修改 vuetify 的 scss 变量的值 vuetify是通过vue cli配置的 开发的代码如下 src assets css overrides scss font siz
  • Vuetify 默认轮播 CSS 选择器,用于减少过渡持续时间

    I need a transition that does not produce the dreaded image blinking for a v carousel item Ideally it s a smooth and qui
  • vue.js:观察输入并未在每次按键时触发

    我有一个input正在监视其模型属性 问题是每次按键时不会调用 watch 方法铬 安卓设备 如果我点击输入文本 就会调用它 过去确实有效 但我不知道发生了什么 在Chrome 桌面版可以正常使用 那就是watch for text每次按键
  • 如何将子集合添加到 Firestore 中的文档? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 没有关于如何在Firestore中的文档中添加子集合的文档 那么如何使用Web应用程序添加子集合 我尝试了这个但没有成功 如何使用代码
  • vuejs2复制剪贴板问题

    我正在尝试使用https alligator io vuejs vue clipboard copy https alligator io vuejs vue clipboard copy 对于 Vue js 中的复制剪贴板功能 它对于字符
  • 如何从特定索引渲染 v-for

    我想在 v for 中循环假设从数字 5 到 10 循环希望在 5 点开始并在 10 点结束 我试过这个 div div 但我想要更有效的循环方式 有谁知道如何让循环从 5 开始 对于你的例子来说是可能的 div some code her
  • 当 Vuejs 中的 props 值发生变化时,DOM 不会更新

    我有父母和孩子 在父级中 我将 3 个变量作为 props 传递给子级 在孩子中我正在使用watch 寻找变量的变化 当孩子第一次被创建时watch按预期工作 但是当更新 props 中的数据时 子级的 DOM 不会更新 正在寻找变量数据变
  • 如何在 vue.js 中创建用于创建和编辑功能的简单模式?

    我正在尝试创建一个模型以便能够编辑现有数据 我该怎么做呢 我正在使用一个
  • 关闭 css 、 vue cli 3 webpack 4 的单独块

    我正在使用使用最新版本的 vue cli 3 创建的项目 我使用的是默认配置 我的路由器有很多动态导入的路由 我的 css 和 js 在生产环境中运行时都被分成多个块 虽然 js 的行为是可取的 我的 css 文件非常小 我想关闭 css
  • 部署到 Netlify 时,Nuxt 将 CSS 不透明度编译为 1%,而不是 100%

    我有一个 Nuxt 应用程序 在本地运行得很好 当我将它部署到 Netlify 时 其中yarn generate自动运行 我注意到发生了一些奇怪的 CSS 事情 我有一张具有悬停效果的卡片
  • 页面在 Google Adwords 转化跟踪上重定向

    我有一个表单 人们可以在其中提交数据 然后使用 ajax 将数据发送到服务器 我已将其设置为 Google Adwords 中的转化 下面是我使用过的代码 问题是 当用户提交表单时 在收到响应后 它会重定向回我给出的 URL 我不想重定向
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线

随机推荐