2021-08-20

2021-08-21  本文已影响0人  sun_hl

1、watch和beforeUpdate,updated有什么不同?

beforeUpdate钩子函数和updated钩子函数间的生命周期

当vue发现data中的数据发生变化,会触发对对应组件的重新渲染,当数据改变后调用beforeupdata,当渲染完成后调用updated钩子函数。

注:通过试验证明,在mounted钩子函数中执行修改data的操作会触发beforeUpdate,而它之前的函数中只要不是可以跳出主线程的数据操作,都不会触发beforeUpdate。例如使用setTimeout会使其中代码跳出主线程到异步线程中,所以它的执行会在mounted之后,所以会触发beforeUpdate。

2、vue 生命周期+watch、computed、methods执行顺序

推荐文章

  1. 详解vue生命周期--https://segmentfault.com/a/1190000011381906
  2. watch、computed、methods三者区别--https://blog.csdn.net/qq_45846359/article/details/108671907
watch、computed、methods执行顺序
watch、computed、methods三者区别

https://blog.csdn.net/qq_45846359/article/details/108671907

Computed 与 methods 对比

1、computed是属性调用,而methods是函数调用
2、computed带有缓存功能,而methods不会被缓存

属性调用:
缓存功能:

3、vue中watch的三个属性

watch详解

基本用法:

当firstName值变化时,watch监听到并且执行

<div>
      <p>FullName: {{fullName}}</p>
      <p>FirstName: <input type="text" v-model="firstName"></p>
</div>
 
new Vue({
  el: '#root',
  data: {
    firstName: 'Dawei',
    lastName: 'Lou',
    fullName: ''
  },
  watch: {
    firstName(newName, oldName) {
      this.fullName = newName + ' ' + this.lastName;
    }
  } 
})
handler方法和immediate属性:

上面的例子是值变化时候,watch才执行,我们想让值最初时候watch就执行就用到了handler和immediate属性

watch: {
  firstName: {
    handler(newName, oldName) {
      this.fullName = newName + ' ' + this.lastName;
    },
    // 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法,如果设置了false,那么效果和上边例子一样
    immediate: true
  }
}
deep属性(深度监听,常用于对象下面属性的改变):
<div>
      <p>obj.a: {{obj.a}}</p>
      <p>obj.a: <input type="text" v-model="obj.a"></p>
</div>
 
new Vue({
  el: '#root',
  data: {
    obj: {
      a: 123
    }
  },
 watch: {
  'obj.a': {
    handler(newName, oldName) {
      console.log('obj.a changed');
    },
    immediate: true,
    // deep: true
  }
})

上一篇下一篇

猜你喜欢

热点阅读