【发布时间】:2021-08-21 08:40:12
【问题描述】:
在下面的代码中,state 只是一个普通对象,但更改了它的 prop:message(同样,只是一个普通的 prop)会导致重新渲染。为什么?
const App = {
setup() {
const name = Vue.ref("");
Vue.watch(name, () => state.message = `Hello ${name.value}`);
const state = {
name,
message: "Welcome stranger"
};
return state;
}
};
Vue.createApp(App).mount("#root");
<script src="https://unpkg.com/vue@next"></script>
<div id="root">
name: <input v-model="name" /> <br/> message: {{ message }}
</div>
【问题讨论】:
-
因为你正在改变
nameref(通过v-model) -
所以你的意思是 Vue 批量更新,因此它会等待所有观察者处理程序等在渲染之前触发,所以它只渲染一次(在
name更改上)并将更改拾取到message只是巧合吗?换句话说,Vue 并没有真正在message更改时重新渲染? -
Vue 实例监视虚拟 DOM。当我们修改某些属性时,Vue 实例会重新创建虚拟 DOM 并检查与“旧”虚拟 DOM 的差异。如果它不同,那么它只会更新“真实”DOM 中的特定部分。
-
是的,没错。 v3.vuejs.org/guide/…