1、生命周期
1、1 生命周期有哪些?发送请求是在created还是mounted?
生命周期:
- beforeCreate ->
setup(()=>{})- created ->
setup(()=>{})- beforeMount ->
onBeforeMount(()=>{})- mounted ->
onMounted(()=>{})- beforeUpdate ->
onBeforeUpdate(()=>{})- updated ->
onUpdated(()=>{})- beforeDestroy ->
onBeforeUnmount(()=>{})- destroyed ->
onUnmounted(()=>{})
首先两者都可以发送请求,基本上无区别,但因为生命周期执行顺序导致了区别
如果有子组件的情况下,请求写在created里面,会导致请求先执行,子组件的请求后执行,会有什么样的后果呢?
如:页面中顶部有一个子组件封装的轮播图,除了轮播图,其他的数据请求都写在父组件里面,请求写在created里,会先去请求除了子组件轮播图以外的数据,这样导致最上层的轮播图会一直不显示图片
1、2 为什么发送请求不在beforeCreate里?beforeCreate和created有什么区别?
因为如果请求是写在方法里面的,那么在beforeCreate时还没有加载方法,会找不到而报错
beforeCreate时没有数据,没有方法 created时有数据,有方法
1、3 在created中如何获取DOM
- 写异步代码 如:setTimeout、请求、Promise.....
- 使用 nextTick
1、4 一旦进入组件会执行哪些生命周期
会依次执行
- beforeCreate
- created
- beforeMount
- 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 组件传值(通信)的方式
3. 路由
3.1 路由的模式
常见的 history、hash
区别:
- 找不到页面
history会发起一次请求,给后端造成一点压力(解决方案:配置404页面),hash不会发送请求
- 关于项目打包自测问题
hash打包后点击index.html 可以看到页面
history默认是看不到内容,需要配置
- 表象不同
hash有#
history没有
3.2 导航故障
当前页跳当前页会报错 解决: 重写路由的push方法
3.3 导航守卫
- 全局导航守卫
- 路由独享守卫
- 组件内守卫
isRef、unRef、toRef、toRefs
isRef:检查一个值是否为ref
unRef:如果参数是ref,则返回内部值,否则返回参数本身
toRef:基于响应式对象上的一个属性,创建一个对应的ref,这样创建的ref与其源属性保持同步,改变源属性的值将更新ref的值,反之亦然
toRefs:将一个响应式对象转换一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的ref,每个单独的ref都是使用toRef()创建的
$nextTick原理
$nextTick方法中的参数是被异步的,总的来说,在vue的文档中大概意思就是获取更新后的dom
场景:dom渲染完成了,需要导入数据进去(可能会修改一下dom),这时候就用