在构建我的应用程序时,我看到一些奇怪的行为,其中一部分dom对输入没有正确反应。突变正在注册,状态正在改变,但DOM中的属性却没有。我注意到当我返回时,在html中编辑了一个新的空白行,然后返回,它现在正在显示新的道具。但是我必须编辑,保存文档,然后返回以查看状态的任何新更改。
因此状态正在更新,但是Vue没有对更改做出反应。这就是我想为什么的原因:https : //vuejs.org/v2/guide/reactivity.html#For-Objects
Vue无法检测到属性的添加或删除。由于Vue在实例初始化期间执行getter / setter转换过程,因此数据对象中必须存在一个属性,以便Vue对其进行转换并使其具有反应性
有时您可能想为现有对象分配许多属性,例如使用Object.assign()或_.extend()。但是,添加到对象的新属性不会触发更改。在这种情况下,请使用原始对象和mixin对象创建具有属性的新鲜对象
我的状态下的Object是的实例js-libp2p
。每当libp2p
实例执行某项操作时,我都需要定期更新处于状态的对象。我通过执行突变来做到这一点
syncNode(state, libp2p) {
state.p2pNode = libp2p
}
libp2p
我正在尝试通过更改使DOM响应的对象的当前实例在哪里state.p2pNode
。我不能使用$set
,即用于单值编辑,并且我认为.assign
还是.extend
无法使用,因为我正尝试替换整个对象树。
为什么会有此限制,并且有针对此特定问题的解决方案?
以state
这种方式重新分配Vuex 项目所需的唯一事情是事先声明它。
即使覆盖整个值,该项目是对象还是任何其他变量类型都是无关紧要的。这与需要进行反应性警告的情况不同,set
因为尽管state
是对象,但Vue仍无法检测到对象属性突变。这是不必要的:
Vue.set(state, 'p2pNode', libp2p);
如果存在正确使用的组件p2pNode
而对重新分配没有反应的组件,那么肯定还有其他问题。确认您已在Vuex初始状态声明/初始化了它:
state: {
p2pNode: null // or whatever initialization value makes the most sense
}
这是一个演示示例。问题可能出在您没有以某种反应方式使用Vuex值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句