Javascript 为什么当两个反应性数据超接近时,Vue只更新一次?

Javascript 为什么当两个反应性数据超接近时,Vue只更新一次?,javascript,vue.js,vuejs2,vue-component,vue-reactivity,Javascript,Vue.js,Vuejs2,Vue Component,Vue Reactivity,请看这个最小的例子 导出默认值{ 数据(){ 返回{ 姓名:“艾米”, 年龄:18岁, }; }, 计算:{ 组合数据用于监视(){ 返回{ 姓名:this.name, 年龄:这个年龄, }; }, }, 观察:{ 组合数据用于监视(){ log(“已触发!”); }, }, 安装的(){ 设置超时(()=>{ this.name=“Bob”; 年龄=20岁; }, 1000); }, }; 控制台只会记录一次“触发!”,为什么会发生这种情况 Vue如何确定此批处理更新?来自: 如果您还没有注

请看这个最小的例子

导出默认值{
数据(){
返回{
姓名:“艾米”,
年龄:18岁,
};
},
计算:{
组合数据用于监视(){
返回{
姓名:this.name,
年龄:这个年龄,
};
},
},
观察:{
组合数据用于监视(){
log(“已触发!”);
},
},
安装的(){
设置超时(()=>{
this.name=“Bob”;
年龄=20岁;
}, 1000);
},
};
控制台只会记录一次
“触发!”
,为什么会发生这种情况

Vue如何确定此批处理更新?

来自:

如果您还没有注意到,Vue会异步执行DOM更新。每当观察到数据更改时,它将打开一个队列并缓冲同一事件循环中发生的所有数据更改。如果同一个观察者被多次触发,它将只被推入队列一次。这种缓冲重复数据消除对于避免不必要的计算和DOM操作非常重要。然后,在下一个事件循环“tick”中,Vue刷新队列并执行实际(已消除重复)工作

因此,这两个监视触发器更新都发生在相同的更新周期中,并被反应系统“消除”为一个调用