面试相关
基础
网络
vue
nextTick 在哪里使用?原理是?
作用: nextTick 用于将传入的回调函数延迟到下次 DOM 更新之后执行,主要用于获取最新的 DOM 数据
原理: nextTick 中的回调函数并非立刻执行,而是采用微任务队列的方式,统一执行
nextTick 是用来获取最新的 dom 数据的,为什么有时候能拿到有时不能拿到?
一般而言 nextTick 是基于微任务的,而如果对 dom 数据的修改是在宏任务中进行,然后再试图在 nextTick 中获取, 那肯定是不行的
比较绕的例子:nexttick 是怎么可以获取到更新后的 dom 的_记一个 nextTick 引发的 bug, 为啥 nextTick 能拿到更新后的 dom
哪些是宏任务:setTimeout, 网络请求的回调和 ajax 请求的取消
注意:
- 纯 js 的 dom 更新是立刻执行,且能立刻获取到结果的
- js 的事件函数是立刻执行的。看下面例子的控制台输出
vue 如何检测数组变化
- vue2 对数组的操作方法进行劫持
- vue3 是 proxy 方式,可以直接监听到数据变化
vue2 和 vue3 有哪些变化
- 改用 proxy 代替
Object.defineProperty, 可以直接监听数组变化,也可以直接监听到普通对象中新增的属性 - hook 代替 mixin
- 去除了原本的事件总线,需要使用插件实现
- 支持多个 v-model
- 多出了 composition api
ref 与 reactive 的区别
都是将变量转换为响应式数据。ref 用于普通的数据类型,reactive 用于对象数据类型。ref 内部实际也是将普通数据类型转换为对象数据类型,所以我们使用的时候才会需要写.value
v-model 原理
监听 prop 属性变量的修改事件,然后在修改事件的回调函数中完成 prop 属性变量的值修改
什么是 MVVM
MVVM 是一个软件架构设计模式, 源于 MVC,使用 VM 替换了 MVC 中 C 也就是控制器。VM 也即ViewModel. VM 的作用就是将视图与数据的变化关联起来,vue 实际就是起到 VM 的作用
父子组件生命周期函数执行顺序
加载渲染过程:
父组件 beforeCreate
父组件 created
父组件 beforeMount
子组件 beforeCreate
子组件 created
子组件 beforeMount
子组件 mounted
父组件 mounted
父组件 mounted 之后,不保证一定能拿到 dom 数据,dom 数据的获取要在 nextTick 中进行
更新过程:
父组件 beforeUpdate
子组件 beforeUpdate
子组件 updated
父组件 updated
销毁过程:
父组件 beforeDestroy
子组件 beforeDestroy
子组件 destroyed
父组件 destoryed
如何解决初始页闪屏问题
使用 css 让 vue 挂载的根节点初始为隐藏状态
如何优化首页加载或者说首页白屏问题
分析首页资源加载情况,以及打包产物,看首页是否加载了不需要的资源。然后优化打包结果。
第三方资源 CDN 化
给 vue 挂载的根元素加入 loading 效果
打包工具
为什么要使用异步组件
异步组件会单独打包成一个组件,且只有在用到的时候,才会加载,因此可以减少原本引入的资源文件的大小