Vue 2 反应性:计算 属性 不会触发 DOM 更新
Vue 2 Reactivity: computed property doesn't trigger DOM update
我有一个基于一些嵌套对象属性的计算 属性。当对象发生更改时,计算的 属性 似乎会更新(在 vue-dev-tools 中),但更改不会反映在 UI 中。我知道嵌套对象的反应性,但我从来没有 change/assign 我的 order
对象的嵌套 属性,它唯一的变化是在 updateOrder()
中(分配根级别的对象。
我的 UI 没有更新是什么原因?开发工具是否同步到与 UI 相同的状态?我是否遗漏了有关 Vue 反应系统的一些信息?
这里是一些非常简化的代码:
<template>
<my-component
@order-changed="updateOrder"
/>
<div v-if="isOrderComplete">
Your order is complete // this never shows until I refresh page
</div>
<div v-else>
Please Submit the order // this shows at first
</div>
</template>
export default {
props: function(){
initialOrder: Object,
},
data: function(){
order: this.initialOrder
},
methods: {
updateOrder: function(newOrder){ // gets triggered by a child component
this.order = newOrder;
}
},
computed: {
isOrderComplete: function(){ // starts as false, becomes true later, seems to be updated in dev-tools
return this.order.foo || this.order.bar
}
}
}
嵌套对象不会自动更新计算属性,您可以在Watch
属性.
中观察变化
watch: {
'order.foo'(newValue) {
// * If any changes happed, this will be triggered !
}
}
TLDR:确保控制台中没有任何 javascript 错误
我无法在孤立的代码笔中重现错误。所以我想还有别的事情发生了。由于更新订单的副作用,我抛出了一些错误。它们似乎无关,但一旦我修复了所有错误,错误就消失了。我认为错误 short-circuited Vue 生命周期,即使该错误与我计算的 属性.
无关
我有一个基于一些嵌套对象属性的计算 属性。当对象发生更改时,计算的 属性 似乎会更新(在 vue-dev-tools 中),但更改不会反映在 UI 中。我知道嵌套对象的反应性,但我从来没有 change/assign 我的 order
对象的嵌套 属性,它唯一的变化是在 updateOrder()
中(分配根级别的对象。
我的 UI 没有更新是什么原因?开发工具是否同步到与 UI 相同的状态?我是否遗漏了有关 Vue 反应系统的一些信息?
这里是一些非常简化的代码:
<template>
<my-component
@order-changed="updateOrder"
/>
<div v-if="isOrderComplete">
Your order is complete // this never shows until I refresh page
</div>
<div v-else>
Please Submit the order // this shows at first
</div>
</template>
export default {
props: function(){
initialOrder: Object,
},
data: function(){
order: this.initialOrder
},
methods: {
updateOrder: function(newOrder){ // gets triggered by a child component
this.order = newOrder;
}
},
computed: {
isOrderComplete: function(){ // starts as false, becomes true later, seems to be updated in dev-tools
return this.order.foo || this.order.bar
}
}
}
嵌套对象不会自动更新计算属性,您可以在Watch
属性.
watch: {
'order.foo'(newValue) {
// * If any changes happed, this will be triggered !
}
}
TLDR:确保控制台中没有任何 javascript 错误
我无法在孤立的代码笔中重现错误。所以我想还有别的事情发生了。由于更新订单的副作用,我抛出了一些错误。它们似乎无关,但一旦我修复了所有错误,错误就消失了。我认为错误 short-circuited Vue 生命周期,即使该错误与我计算的 属性.
无关