随笔 - 312  文章 - 0  评论 - 2  阅读 - 11万

Vue2:生命周期函数(面试)

生命周期函数

 

创建前后:beforeCreate()  created()  

挂载前后:beforeMount()  mounted()  

更新前后:beforeUpdate()  updated()  

销毁前后:beforeDestroy()  destroyed()

复制代码
                //钩子函数: 生命周期函数  (c语言中有一类系统回调的函数然后执行业务 叫做钩子)
                //在某一种条件成立的时刻 系统会去调用的vue中设定的函数 这些函数都叫做:生命周期函数 
                //今天主要是学习vue中组件8个
                //当前vm实例在创建到销毁的过程中  会去调用的函数:
                beforeCreate(){
                    //能否网络请求?
                    //能做网络请求,因为这是函数在运行时XMLHttpRequest是可以访问并且去做AJAX请求的
                    
                    //能否网络请求数据 然后设置到数据源中?
                    //不能设置到数据源中,因为这个钩子中 this还在创建
                                        
                    //这个在项目中干什么?
                    //只要不是用于页面渲染
                    //预加载图片: 网页中同源加载的优化(同一个页面中img script等等 src属性去请求资源)
                    //预加载工具
                    //第三方工具的加载
                    
                    //这个函数在运行时 vm正在创建中:劫持data,methods 也就是 this对象中还不能访问到数据
                    console.log("beforeCreate",this)                                        
                },
                created(){
                    //能否网络请求?
                    //能做网络请求,因为这是函数在运行时XMLHttpRequest是可以访问并且去做AJAX请求的
                    //能否网络请求数据 然后设置到数据源中?
                    //可以设置到数据源中,因为这个钩子中 this已经创建完毕了
                    //这个在项目中干什么?
                    //请求首屏数据
                    
                    //vm对象已经创建完毕了,但是它(vm)还没有挂载到DOM树中
                    //这个函数可以操作this对象了  但是无法操作DOM
                    console.log("created")                    
                },
                beforeMount(){
                    //渲染前的操作
                    //vm对象已经创建完毕了,在挂载之前触发的钩子
                    //这个函数可以操作this对象了  但是无法操作DOM
                    console.log("beforeMount")
                },
                mounted(){
                    //vm已经挂载到页面了
                    //请求首屏数据,请求时页面已经出来了                    
                    console.log("mounted")
                },
                beforeUpdate(){
                    //这两个钩子中 不能网络请求新数据 去更新数据源
                    //会导致死循环
                    
                    //数据源已经更新了,页面重新渲染前(并不是数据更新前) 触发的钩子
                    console.log("beforeUpdate")
                },
                updated(){
                    //页面已经重新渲染了触发的钩子
                    console.log("updated")
                },
                
                beforeDestroy(){
                    
                    //vm对象销毁之前触发的钩子,this还在  可以做最后的操作
                    //保存用户的行为配置文件:播放器的进度 等等
                    console.log("beforeDestroy")
                },
                destroyed(){
                    //后面在webpack环境下操作 无法操作this
                    //往往把当前组件中计时器清除了  可以把body的滚动条滚到顶部
                    console.log("destroyed")
                }
复制代码

 

vm对象的生命周期函数(钩子函数,生命钩子) 相当于是一种特殊事件,当vm实例在整个运行的过程中,会在不同的时期去执行特定的函数,这样的函数就是vue的生命周期函数

beforeCreate created beforeMount mounted destory这些钩子都只执行一次

beforeUpdate updated第一次构建不会调用,以后每次data被更新了就会调用

beforeDestroy destroyed 销毁的方式有两种:用户关闭和代码this.$destroy()//销毁vm实例

 

生命周期函数(面试题总结)

为什么要用生命周期函数?

0.把整个运行期间的业务区分的很明显

1.能够更好的帮助我们把产品的业务逻辑实现了

2.更有利于我们维护产品 和 修改需求

3.能够让我们写出更高质量的产品的代码

 

网络请求应该在什么钩子中,为什么?

可以放在data生成以后更新数据之前 的所有钩子中

具体的更具业务需求来 常见的放在created或者mounted中

因为网络请求下来的数据 常常会存在data容器中

created:因为有时候我们希望异步的网络请求和vm的挂载同时进行 体现出CPU多核的优势

mounted:因为有时候我们希望本地的UI骨架已经加载完毕以后再去请求数据刷新UI

 

你用销毁钩子做过什么?

常常去把一些运行着的代码停下来

本地或者网络请求来记录用户的配置信息或者偏好设置

 

1.什么是生命周期函数?


vue组件对象在创建到销毁的过程中,在某一种条件成立的时刻 系统会去调用的vue中设定的函数 这些函数都叫做:生命周期函数

2.vue的命周期函数有哪些?

普遍的答法:

有8个创建前后,挂载前后,更新前后,销毁前后

高级的答法:

组件的有8个(创建前后,挂载前后,更新前后,销毁前后)

自定义指令也有5个:

bind,inserted,update,ComponentUpdated,unbind

动态组件有2个 :

keep-alive的生命周期函数

组件被销毁缓存时,会触发组件的deactivated函数。

组件被创建激活时,会触发组件的activated函数

路由(组件有3个,全局有2个,独享有1个) 

路由守卫

beforeRouteLeave 从该组件离开

beforeRouteEnter(to,from,next),组件被激活

beforeRouteUpdate(to,from,next),组件重用时被调用

全局守卫

beforeEach(fn)

beforeResolve(fn)

afterEach(fn)

独享守卫

beforeEnter(to,from,next)

 

3.为什么设计生命周期函数?


为了更好的设计程序,让代码更有逻辑 和 可维护性

4.页面首次加载过程中,会依次触发哪些钩子


beforeCreate,created,beforeMount,mounted

5. this.$el 是什么?它在哪些钩子中才能访问?


它代表了当前组件的真实DOM,要在mounted之后才有

6. Vue 实例的 data 属性,在哪些钩子中能访问


created beforeMount mounted beforeUpdate updated beforeDestroy

7.为什么不要在更新钩子中做页面的数据请求?


会导致死循环 react有一个shoudComponentUpdate可以自己控制 但是vue没有

8.你用beforeCreate做过什么业务?


这个钩子中可以做网络请求 但是vm没有构建完毕,此时数据方法等等的劫持还没有完成,不能操作this,因此可以做预加载.

9.VM和DOM之间的关系?


9.1.VM是JS模拟出来的跟DOM结构很像的一种对象结构VNode. 它通过底层的render函数渲染到页面上,让页面DOM跟虚拟VNode关联映射.
9.2 如果VM的数据源发生变化,会让内存中生成新的VNode 新的VNode会和旧的VNode作比较然后更新,这个过程就是DIFF算法

10.讲一讲DIFF算法?



posted on   香香鲲  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示