vue 组件的生命周期怎么只执行一次_vue组件及子组件的生命周期

本文详细探讨了Vue组件的生命周期,从初始化、创建、挂载到更新和销毁的各个阶段,包括beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。还介绍了子组件和孙组件的生命周期,以及v-if和v-show对它们的影响。文章通过实例展示了生命周期的执行顺序,并提出了beforeCreate钩子可用于加载预渲染内容或页面拦截的场景。
摘要由CSDN通过智能技术生成

生命周期

什么是生命周期?

一个实例从创建到销毁的一个过程。

vue初始化做了什么?

创建vue实例后,调用init方法,做了以下事情:

// 初始化生命周期

//

initLifecycle(vm)

// 初始化事件中心

initEvents(vm)

// 初始化渲染

initRender(vm)

callHook(vm, 'beforeCreate')

// 初始化注入

initInjections(vm) // resolve injections before data/props

// 初始化状态

// 初始化 props、data、methods、watch、computed 等属性

initState(vm)

initProvide(vm) // resolve provide after data/props

callHook(vm, 'created')

// 在初始化最后,如果检测到有el属性,则调用函数挂载vm

if (vm.$options.el) {

vm.$mount(vm.$options.el);

}

复制代码有哪些生命周期?分别做了什么?生命周期的执行过程?

--> 首先创建一个vue实例,Vue(),然后执行初始化init()函数,初始化生命周期、事件中心、渲染;

--> 然后调用beforeCreate:这里拿不到任何数据,数据观察(dataobserver)和事件配置(event/watcher)都没有准备好,没有数据,没有dom

--> 初始化data数据,实现监听,初始化vue内部事件,进行属性和方法的计算。

--> 初始化完成,调用created:这里可以调用methods中的方法,修改data数据, 并且可触发computed重新计算,watch变更等。但是dom还没有挂载,无法访问$el。

--> 然后进行模板编译:将data的数据,和vue的模板语法编译成html,这里会分两种情况,1.是实例内部有模板属性,直接调用,然后用render函数渲染,2.是没有模板属性调用外部html

--> 模板编译完成后,调用beforeMount:这里也可以拿到data数据,可以拿到el,且成功关联到了dom,但是此时的data,并没有渲染到页面中。

--> 然后执行render函数,将渲染的内容挂载到dom节点上

--> 挂载完毕,调用mounted:在这里,dom挂载完毕,data也已经渲染到页面中。mounted仅执行一次。

--> 数据发生变化,调用beforeUpdate:当检测到我们要修改数据的时候,就会触发beforeUpdate的钩子

--> 然后Vue会利用diff算法重新比较新的虚拟dom和旧的虚拟dom,对页面重新渲染。

--> 更新完成,执行updated:当修改vue的data时,vue会自动帮我们更新渲染视图,此时页面上是最新的数据,

避免在这期间更改状态,可能会导致无限循环

钩子不常用,一般用computed,watch

--> 在销毁之前触发,beforeDestroy:所有实例都可以用

--> 然后解除绑定,销毁子组件,事件监听器

--> 销毁完毕,调用destroyed:销毁之后,所有

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值