Vue面试题

Vue面试题

码农世界 2024-05-24 前端 71 次浏览 0个评论

一、关于vue2的生命周期函数

1.1 生命周期函数

函数描述
beforeCreate组件实例被创建之前
create组件实例已经完全创建
beforeMount组件挂载之前
mounted组件挂载到实例之后
beforeUpdate组件数据发生变化,更新之前
updated组件数据更新之后
beforedestory组件实例销毁之前
destoryed组件实例销毁之后
activatedkeep-alive 缓存组件激活时调用
deactivatedkeep-alive 缓存的组件停用时调用
errorCaptured捕获一个来自子孙组件的错误时被调用
dom 以及 data 什么时候出现 console.log(this. e l , t h i s . el,this. el,this.data)
子组件和父组件生命周期函数出现时期

1.2 问题

1.如何在created中获取dom

答:只需异步操作即可 setTimeout,this.$nextTick(()=>{}),
Promise()

2.为什么发送请求不在beforeCreate里?beforeCreate和created有什么区别?

答:如果请求是在methods封装好了,在beforeCreate调用的时候,
beforeCreate阶段是拿不到methods里的方法的(会报错)

3.发送请求是在created里还是mounted里

答:具体要看项目和业务的情况:因为组件的加载顺序是:父组件引入了子组
件,那么先执行父的前3个生命周期,再执行子的前4个生命周期,那么如果我
们的业务是父组件引入子组件,那么在父组件中当前的请求要放在mounted中,
如果当前组件没有依赖关系那么放在created或者mouted生命周期请求都
是可以的。

5.keep-alive的作用:

答:如果当前组件加入了keep-alive 第二次或者第N次加入组件只会执行
activated函数

6.说一说你在项目中最常用的生命周期函数。

created:单组件请求
mounted:同步可以获取dom吗,如果先子组件请求后父组件请求
activated:判断id是否相等,如果不同发起请求
destoryed:关闭视频记录播放历史初始化的时候从上一次的的历史开始播放

二、关于组件

2.1组件的通信方式

父传子: 
  1.给子组件绑定属性的方式 ,子组件通过props来接收。 
  这种方式父传子很方便,但是父穿给孙组件就很麻烦了(父->子 子->孙) 
  这种方式子组件不能直接修改父组件的数据
  
  2.通过this.$parent.xxx使用父组件的数据,可以直接修改父组件的数据
  
  3.依赖注入:父组件可以直接想后代的任一组件传参 ,不用一级一级传递 兄弟之间不行
  父:
	  provide(){
	  return{
	  val1:"这是依赖内容"
	  }
	  后代:
	  inject['val1']
 
子传父:
1.emit
	子组件:定义自定义事件:this.$emit('事件名',参数)
	父组件:给子组件绑定属性  @事件名="方法"
2.ref
	给子组件绑定ref属性 ref='名称'
	
	父组件通过this.$refs.名称
	this.$refs.child
	可直接修改子组件的属性
	this.$refs.child.xxx = ...
平辈之间的传值:通过bus.js中转来做
urilts/bus.js
	import Vue from 'vue'
	export default new Vue()
其他组件引入bus
通过bus.$emit('事件名',参数)和bus.$on('事件名',参数)来传值
	

2.2如何找到跟组件

this.$parent:找到当前组件的父组件,找不到返回自身
this.$root:找到根组件

2.3 slot

1.匿名插槽
2.具名插槽