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

页面上每个Vue实例的单独Vuex

万俟浩
2023-03-14

我正在页面上实例化多个Vue应用程序:

import Vue from "vue";
import App from "./App.vue";
import useStore from "./store";

const arr = [1, 2];
for (const index of arr) {
  const store = useStore();

  new Vue({
    router,
    store,
    render: (h) => h(App)
  }).$mount(`#app$_{index}`);
}

我的商店文件看起来像这样:

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

import address from "./modules/address";

export default function useStore() {
  return new Vuex.Store({
    modules: { address }
  });
}

和地址模块:

const state = {
  address: null
};

const getters = {
  address(state) {
    return state.address;
  }
};

const mutations = {
  setAddress(state, address) {
    state.address = address;
  }
};

export default {
  namespaced: true,
  state,
  getters,
  mutations
};

但该存储似乎在页面上的所有Vue实例中共享。为什么,当我为每个Vue应用程序创建新实例时?

谢啦

共有1个答案

韩良策
2023-03-14

问题不是Vuex存储在多个Vue实例之间共享,而是地址模块的状态在多个Vuex存储之间共享。

Vuex文档解决了这个问题:https://vuex.vuejs.org/guide/modules.html#module-再利用

如果我们使用普通对象来声明模块的状态,那么该状态对象将通过引用共享,并在其突变时导致跨存储/模块状态污染。

只需将地址模块状态声明从普通对象定义更改为函数定义:

const state = () => ({
  address: null
});

你可以走了!

 类似资料:
  • 我想使用header.php为每个页面添加单独的元标记 添加标题,元描述,元关键字的每一页更好的搜索引擎优化Anlayis。我想通过页面上header.php代码实现这一点。 提前谢谢。

  • 我使用部署在ActiveMQ服务内部的Apache Camel模块。 假设我使用Spring DSL并且在文件(简化版)中有路由定义(实现为): 接下来,我在其他XML文件(简化)中配置了骆驼上下文: 我希望使用IoC术语将来自的共享路由(ID=)声明为每个依赖项的实例,因此来自单个骆驼上下文(ID=、、)的每条路由都应该使用该共享路由的自己的实例(ID=),具有单独的内部状态和bean实例等。

  • 我有几个不同的单词需要使用Javascript替换为不同的单词。我想我可以使用replace函数来实现这一点,但它似乎只在第一次调用时起作用。 然而,由于我需要替换的单词彼此相似,这导致了某种问题,我不知道如何修复它。我还真的需要用Javascript而不是jQuery来做这件事。谢了。 例:

  • 问题内容: 我是GWT的新手,打算使用GWT开发用于用户管理应用程序的UI。我打算使用通过Spring / Hibernate创建的现有模块。我想出了如何将GWT与Spring集成在一起,但不确定如何设计布局。 我想要两页: 用户注册页面(想要在HTML中嵌入GWT小部件) 管理页面(上面嵌入了GWT小部件的单独HTML) 我打算使用Spring Security,应该使用简单的JSP登录页面还是

  • 本文向大家介绍Vue-cli中为单独页面设置背景色的实现方法,包括了Vue-cli中为单独页面设置背景色的实现方法的使用技巧和注意事项,需要的朋友参考一下 例子: 1.如果直接在css中设置body的background-color,会导致其他页面的背景色响应改变,所以不可取; 2.如上面例子如果设置.finish-wrap的背景色以及高度为100%时,会发现只是一部分的背景色发现改变,却不能使整

  • 我正在将Vue与一个名为AEM的CMS进行集成,该CMS基本上可以像Vue一样作为组件基础系统工作。而不是有一个网页和进口的。vue文件,此CMS上的每个组件都是一个新的vue实例(新的vue({…}))。因此,在我的页面上,有许多Veu实例使用同一个存储(vuex)彼此通信。 这实际上工作得很好,但我有一个场景,当我需要一个CMS组件在另一个组件中时。由于这两个组件都是唯一的vue实例,并且父级