vue 面试题

147 阅读3分钟

1、生命周期

1、1 生命周期有哪些?发送请求是在created还是mounted?

生命周期:

  1. beforeCreate -> setup(()=>{})
  2. created -> setup(()=>{})
  3. beforeMount ->onBeforeMount(()=>{})
  4. mounted ->onMounted(()=>{})
  5. beforeUpdate ->onBeforeUpdate(()=>{})
  6. updated ->onUpdated(()=>{})
  7. beforeDestroy ->onBeforeUnmount(()=>{})
  8. destroyed ->onUnmounted(()=>{})

首先两者都可以发送请求,基本上无区别,但因为生命周期执行顺序导致了区别

如果有子组件的情况下,请求写在created里面,会导致请求先执行,子组件的请求后执行,会有什么样的后果呢?

如:页面中顶部有一个子组件封装的轮播图,除了轮播图,其他的数据请求都写在父组件里面,请求写在created里,会先去请求除了子组件轮播图以外的数据,这样导致最上层的轮播图会一直不显示图片

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

因为如果请求是写在方法里面的,那么在beforeCreate时还没有加载方法,会找不到而报错

beforeCreate时没有数据,没有方法 created时有数据,有方法

1、3 在created中如何获取DOM

  1. 写异步代码 如:setTimeout、请求、Promise.....
  2. 使用 nextTick

1、4 一旦进入组件会执行哪些生命周期

会依次执行

  1. beforeCreate
  2. created
  3. beforeMount
  4. mounted

如果有keep-alive时

5. activated

1、5 第二次或者第N次进入组件会执行哪些生命周期?

如果当前组件加入了keep-alive 就只会执行activated

1、6 父组件引入子组件,生命周期执行顺序是?

首先:父:题目1.1的前三个

然后:子:能执行的所有生命周期

最后:父:题目1.1的第4个

1、7 加入keep-alive会执行哪些生命周期?

activated ->onActivated(()=>{})

deactivated ->onDeactivated(()=>{})

1、8 你在什么情况下用过哪些生命周期?说一说生命周期的使用场景

created ==> 单组件请求

mounted ==> 同步获取DOM,如果先子组件请求后父组件请求

activated ==> 判断id是否想等,如果不等发起请求

destroyed ==> 关闭页面记录视频播放的时间,初始化的时候从上一次历史开始播放

2. 关于组件

2.1 组件传值(通信)的方式

vue3 组件通信

3. 路由

3.1 路由的模式

常见的 history、hash

区别:

  1. 找不到页面

history会发起一次请求,给后端造成一点压力(解决方案:配置404页面),hash不会发送请求

  1. 关于项目打包自测问题

hash 打包后点击index.html 可以看到页面

history默认是看不到内容,需要配置

  1. 表象不同

hash 有#

history 没有

3.2 导航故障

当前页跳当前页会报错 解决: 重写路由的push方法

3.3 导航守卫

  1. 全局导航守卫
  2. 路由独享守卫
  3. 组件内守卫

isRef、unRef、toRef、toRefs

isRef:检查一个值是否为ref

unRef:如果参数是ref,则返回内部值,否则返回参数本身

toRef:基于响应式对象上的一个属性,创建一个对应的ref,这样创建的ref与其源属性保持同步,改变源属性的值将更新ref的值,反之亦然

toRefs:将一个响应式对象转换一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的ref,每个单独的ref都是使用toRef()创建的

$nextTick原理

$nextTick方法中的参数是被异步的,总的来说,在vue的文档中大概意思就是获取更新后的dom

场景:dom渲染完成了,需要导入数据进去(可能会修改一下dom),这时候就用