vue经典面试题:常见的钩子函数你知道哪些

📌大前端入门到精通 专栏正在持续更新中,案例的原理图解析、各种模块分析💖这里都有哦,同时也欢迎大家订阅专栏,获取更多详细信息哦✊✊✊
✨个人主页:零小唬的博客主页
🥂欢迎大家 👍点赞 📨评论 🔔收藏
✨作者简介:20级计算机专业学生一枚,来自宁夏,可能会去做大前端,目前还在努力学习并记录博客中🧸
🎀本系列专栏: 大前端入门到精通
💕希望本文对你在学习前端的过程中有所帮助,如有不足请指正一起学习,一起进步🥇
⛪座右铭:只要你还愿意努力,世界一定会给你惊喜


首先,我们都应该知道在vue中可以自动执行的函数叫做钩子函数


生命周期钩子函数

1、定义:vue实例从创建到销毁的过程中被自动执行的函数

2、书写位置:与 data methods watch computed directives 同级的位置

3、作用:给程序提供一个自动执行逻辑的场所

4、4大阶段8大钩子:

  • 实例创建前后:

    • beforeCreate(数据的观测与事件的初始化 属性的创建还没有进行)
    • created(此时vue实例已经创建完毕 所以数据的观测属性方法等内容都已经创建完毕(el属性还没有挂载))
  • 模板渲染前后:

    • beforeMount(页面挂载前调用,在此阶段页面还没有进行渲染与模板的编译,程序在此时会把数据绑定到页面上,但是页面并没有显示)
    • mounted(页面已经渲染出来了,html的内容会在dom中进行加载展示)
  • 数据更新前后:

    • beforeUpdate(在此时数据会不停的在dom中进行修改)
    • updated(把修改之后的dom内容已经在页面成功的展示了)
  • 实例销毁前后:

    • beforeDestory(此时vue实例还能用)
    • destoryed(什么都没有了,vue实例等内容都没了)

5、生命周期第一次执行那些(页面第一次加载触发哪些)

  • 实例创建之前-----beforeCreate
  • 实例创建之后-----created
  • 模板渲染之前-----beforeMount
  • 模板渲染之后-----mounted

6、dom在那个阶段渲染完毕

  • 模板渲染之后-----mounted

自定义指令的钩子函数


1、常见的自定义指令的钩子函数:

  • bind 指令绑定到元素之上的时候执行 但是只执行一次
  • unbind 指令被移除的时候执行 只执行一次
  • update 所有组件节点更新的时候执行调用
  • componentUpdate 指令所在节点以及所有的子节点都更新完成的时候调用
  • inserted 绑定指令的元素在页面展示的时候调用(常用)

2、全局自定义指令–directive

Vue.directive("自定义指令名字",{
  自定义指令钩子函数(el你绑定自定义指令的dom){
    你的逻辑
  }
})

3、局部自定义指令–directives

directives:{
    自定义指令的名字:{
	    自定义指令的钩子函数(el代表的就是指定放在那个dom上形参就是谁){
			  你的逻辑
      inserted(el){
        el.focus()
      }
	    }
    },
    自定义指令的名字2:{
    },
}

路由的钩子函数


1、路由钩子(路由守卫/导航守卫/路由卫士)

2、常见的钩子函数:

  • 全局前置守卫—beforeEach():在所有路由跳转之前 触发的钩子函数(此时路由还没有跳转完成)

  • 全局后置守卫— afterEach():所有路由跳转之后 触发的钩子函数 (此时已经进入到了跳转之后的新页面)

// 全局前置
router.beforeEach((to,from,next)=>{
  console.log(to);
  console.log(from);
  //可以进行判断是否登录设置进步进入此页面
  if(to.path=="/phone"||to.path=="/shop"){
    next()
  }else{
    alert("您没有登录请您登录后再访问")
    next("/phone")
  }
})
// 全局后置
router.afterEach((to,from)=>{
  console.log("全局后置守卫")
})
  • 路由独享—beforeEnter:只会对一个路由规则生效(路由独享写在那个规则之上 就对哪一个生效)
{
  path: '/about',
  name: 'About',
  component: () => import('../views/About.vue'),
  // 路由独享守卫
  beforeEnter(to,from,next){
    console.log(to);
    console.log(from);
    next()
  }
},
  • 进入组件时候—beforeRouteEnter

  • 离开组件的时候—beforeRouteLeave

// 进入组件
beforeRouteEnter(to,from,next){
  console.log("我进来了")
  console.log(to)
  console.log(from)
  next()
},
beforeRouteLeave(to,from,next){
  console.log(to)
  console.log(from)
  if(confirm("您确定离开吗?")){
    next()
  }else{
    next(false)
  }
},

keep-alive钩子函数


1、在 Vue.js 中, 是一个抽象组件,用于缓存动态组件的状态,以便在组件切换时保留组件的状态和避免重新渲染。它可以在有条件地保留组件状态的情况下,提高应用性能。

2、主要作用:

  • (1)缓存组件状态: 包裹的动态组件在被切换时,并不会被销毁,而是被缓存起来。这样在下次再切换到这个组件时,不需要重新创建和渲染,而是直接从缓存中取出,保留之前的状态。
  • (2)钩子函数: 提供了两个钩子函数,分别是 activated 和 deactivated。这些钩子函数在组件被激活(插入到 DOM 中)和停用(从 DOM 中移除)时被调用,可以用来执行一些特定的逻辑,例如数据的重置或异步操作。

3、常见的钩子函数:

  • activated 在进入被kepp-alive管理的组件时候触发 deactivated 在离开被kepp-alive管理的组件时候触发

注意:这两个钩子应该写在被keep-alive管理的组件中 与data等属性同级


🎉记录是为了不停的思考,创作更是为了更好的思考,有人说过:2023年以后的中国市场将永远属于长期主义者,如果你觉得对您有帮助,欢迎一起交流学习,本人也是一名很菜的20级学生,编程界的小白,一起加油变优秀啦!