vue2生命周期面试题

文章目录

    • 1. 生命周期有哪些
      • 1.1 一旦进入组件会执行哪些生命周期
      • 1.2 父组件引入子组件,那么生命周期的执行顺序是
      • 1.3 在 created 中如何获取dom
      • 1.4 为什么发送请求不在beforeCreate中,beforeCreate和created有什么区别
      • 1.5 发送请求在created还是mounted
      • 1.6 加入 keep-alive 会执行哪些生命周期
      • 1.7 第二次或者第N次进去组件会执行哪些生命周期
      • 1.8 在什么情况下用过哪些生命周期,说说生命周期的使用场景

1. 生命周期有哪些

八个生命周期分别为:

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestory
  • destoryed

1.1 一旦进入组件会执行哪些生命周期

会执行前四个生命周期,前两个生命周期是创建前后(此时还没有操作dom),后两个是挂载前后

  • beforeCreate
  • created
  • beforeMount
  • mounted
    vue2生命周期面试题_第1张图片
    vue2生命周期面试题_第2张图片
    在这里插入图片描述
    此时得出的结论就是在beforeCreate 既没有数据也没有dom,created 有数据,beforeMounte 有数据,mounted 既有数据又有dom。

1.2 父组件引入子组件,那么生命周期的执行顺序是

此时是直接在html文件中通过component新建一个组件,没有用vue脚手架创建项目进行实现父组件引入子组件。
从执行顺序可以看出,先将父组件的数据准备好,如果子组件需要,也可以将数据传给子组件,然后子组件的数据处理以及dom构建,最后执行父组件的dom
vue2生命周期面试题_第3张图片
vue2生命周期面试题_第4张图片
此时声明周期的执行顺序就是:先执行父组件的前三个声明周期,在执行子组件的四个生命周期,最后在执行父组件的第四个生命周期
如果存在多个子组件,也是先执行父组件前三个,然后将所有的子组件(按顺序进行执行)执行完之后,在执行父组件的最后一个
vue2生命周期面试题_第5张图片

1.3 在 created 中如何获取dom

只要使用异步代码,获取dom 是在异步中获取的,就可以获取到
在这里插入图片描述
(1)axios
vue2生命周期面试题_第6张图片
在这里插入图片描述
(2)定时器
vue2生命周期面试题_第7张图片
在这里插入图片描述
(3)nextTick 也可以,他是在dom 执行完毕之后获取的,也是异步
vue2生命周期面试题_第8张图片

在这里插入图片描述
(4) 获取dom 的不同方式
也可以通过ref 来进行获取dom
vue2生命周期面试题_第9张图片

1.4 为什么发送请求不在beforeCreate中,beforeCreate和created有什么区别

为什么发送请求不在beforeCreate中:
因为:如果请求是在methods中封装好的,在beforeCreate进行调用的时候,此时拿不到methods 中的方法,会报错,但是如果直接进行发送请求,是可以拿到的,因为请求时异步的。
beforeCreate和created有什么区别
(1)beforeCreate阶段没有数据,created可以有data
(2)created可以拿到methods ,beforeCreate拿不到

1.5 发送请求在created还是mounted

通过代码的演示,当在子组件和父组件都进行发送axios请求的时候,如果此时子组件中放在任何一个生命周期(前四个),
(1)父组件发送请求放到created(前三个生命周期的时候,首先返回的是父组件的数据,然后再返回子组件的数据)
假设此时在created 中发送请求:
vue2生命周期面试题_第10张图片
vue2生命周期面试题_第11张图片
结果为:
在这里插入图片描述
(2)将父组件发送的请求放到mounted中,此时情况如下:
vue2生命周期面试题_第12张图片
vue2生命周期面试题_第13张图片

问题:发送请求在created还是mounted
总结: 这个问题要根据具体项目和业务情况来看,因为组件的加载顺序是,父组件引入子组件,那么先执行父组件的前3个生命周期,再执行子组件的前四个生命周期。
(1)所以此时如果我们的业务是父组件引入子组件,并且优先加载子组件的数据,那么在父组件中当前的请求要放在 mounted 中,
(2)如果是父组件引入子组件,或者组件之间没有依赖关系,此时放在哪一个生命周期中都可。

1.6 加入 keep-alive 会执行哪些生命周期

如果使用了keep-alive 组件,当前组件会额外增加2 个生命周期,也就是系统自身的 8 个 + 此时新增的2 个
执行: activated deactivated
keep-alive是缓存当前组件。用于当点击同一个页面时,能够保存数据,不去重复发送请求

如果当前组件加入了keep-alive ,第一次进入组件会执行 5 个生命周期。
分别是前四个加上activated
vue2生命周期面试题_第14张图片

1.7 第二次或者第N次进去组件会执行哪些生命周期

(1)如果当前组件加入了 keep-alive ,第二次和第n次,当前组件之后执行一个生命周期 activated
在这里插入图片描述

(2)如果没有加入keep-alive,第二次和第n次,会执行永远的前四个生命周期
在这里插入图片描述

1.8 在什么情况下用过哪些生命周期,说说生命周期的使用场景

比较常用的几个生命周期的介绍:

  • created : 单一的组件,没有父子之间的关系,
  • mounted: 此时在请求的时候,是否有父子之间的关系,有,并且子组件优先父组件先加载,请求就放在mounted中。或者同步获取dom 也放在 mounted 中
  • activated:用来进行缓存,判断id 是否相同,不同发送请求
  • destoryed:业务上的收起,以视频播放为例,当视频关闭的时候,,记录当前关闭的时间,(具体步骤,当用户把页面关闭之后,或者路由切换时,进行记录)初始化的时候从上一次的历史开始播放

你可能感兴趣的:(面试题,vue项目学习,前端,javascript,vue.js)