vue.js之vuex:状态字段 "foo"被 "foo"处的同名模块覆盖
zhenyulu
阅读:198
2024-12-31 21:38:35
评论:0
我在控制台中收到此警告:
[vuex] 状态字段“foo”被“foo”处的同名模块覆盖
这是什么意思,我做错了什么?
请您参考如下方法:
这是 Vuex 3.1.2 中添加的新警告。
https://github.com/vuejs/vuex/releases/tag/v3.1.2
当 state
中的属性名称时记录它与模块名称冲突,如下所示:
new Vuex.Store({
state: {
foo: 'bar'
},
modules: {
foo: {}
}
})
如果您尝试访问
state.foo
您可能希望该值为
'bar'
但它实际上是指
state
的
foo
模块。
您可以通过从
state
中删除属性来解决此问题。对象,或通过重命名属性或模块。
这是一个记录相关警告并显示
state.foo
的结果值的小示例。 :
const store = new Vuex.Store({
state: {
foo: 'bar'
},
modules: {
foo: { state: { flag: 2 } }
}
})
console.log(store.state.foo)
<script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>
<script src="https://unpkg.com/vuex@3.4.0/dist/vuex.js"></script>
更新:
如果您使用相同的配置对象创建多个商店,也可以记录此警告,例如在测试期间。
这是一个例子:
const config = {
state: {},
modules: {
foo: {}
}
}
const store1 = new Vuex.Store(config)
const store2 = new Vuex.Store(config)
<script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>
<script src="https://unpkg.com/vuex@3.4.0/dist/vuex.js"></script>
问题是配置包含一个根
state
目的。第一家商店添加
foo
模块到该对象。当第二家商店尝试做同样的事情时,它发现该属性已经存在并记录错误。
如果根
state
对象是空的,就像在我的示例中一样,那么它可以被删除。但是,假设它不为空,您可以通过将其更改为函数来解决此问题:
const config = {
state () {
return {
/* state properties here */
}
},
modules: {
foo: {}
}
}
这与
data
的工作方式完全相同。一个组件的功能。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。