bho*_*ood 0 vue.js vuex vuex-modules
我正在将Vue集成到表单站点上,这意味着如果页面上有多个表单,则必须创建该Vue应用程序的多个实例。所有实例共享同一Vuex存储。
我创建了一个Vuex模块,以便每个Vue实例都可以拥有自己的本地状态。我的主要目标是防止一个Vue实例更新另一个Vue实例的状态。
这是我的Vuex模块
export default {
state() {
return {
stateObj: {...}
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建我的Vuex实例:
export default new Vuex.Store({
modules: {
form
}
})
Run Code Online (Sandbox Code Playgroud)
我正在阅读Vuex文档,它说您需要使用一个返回模块状态的函数,这就是我正在做的事情。但是,当我在一个Vue实例中更新模块的状态时,它将更新所有其他Vue实例的模块状态。
这是我指的Vuex文档中的部分。
发生这种情况的原因是您并未真正创建form模块或存储的多个实例。本质上,您正在创建Vue应用程序的多个实例,也就是说,您具有多个Root 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() });
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题。尽管这种设计并不少见,但您仍应退后一步思考-如果需要在所有这些应用程序之间共享数据该怎么办?由于存在多个实例,因此您无法轻松做到这一点。只要所有这些形式都孤立地工作,就可以了。
或者,如果您必须真正创建商店的单个实例,请考虑更改商店设计。您应该有一个根实例/应用程序,并用于v-for生成多个表单。同样,在商店方面,您将有一个数组来维护所有表单的集合。
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |