问题
vue中点击事件,不仅会触发自己的回调,还会触发其他方法的执行
(预期是只触发自己的回调)
代码
...
<p>方法时间: {{ getTime() }}</p>
<button @click="setFullName">setFullName</button>
...
methods:{
getTime () {
console.log('触发method时间')
return Date.now()
},
setFullName () {
console.log('触发name改变')
this.fullName = 'John Doe'
}
}
结果
点击setFullName按钮后,运行结果:
console: 触发name改变
console: 触发methond时间
查了官网说,vue2.x中只要组件使用的众多状态中有一个发生变化,那么整个组件就要重新渲染
在这里vue做了优化:如果组件只有一个节点发送了变化,如果直接重新渲染整个组件的所有节点,会造成很大的性能浪费,因此vue使用了vnode,并对其进行缓存,在发生变化时,将上一次缓存的vnode和当前新创建的vnode进行对比,只更新发生变化的节点