vue的组件和生命周期

Posted 放咩咩的星星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue的组件和生命周期相关的知识,希望对你有一定的参考价值。

Vue里组件的通信

通信:传参、控制、数据共享(A操控B做一个事件)

模式:父子组件间、非父子组件

  1. 父组件可以将一条数据传递给子组件,这条数据可以是动态的,父组件的数据更改的时候,子组件接收的也会变化

    子组件被动的接收父组件的数据,子组件不要再更改这条数据了

  2. 父组件如果将一个引用类型的动态数据传递给子组价的时候,数据会变成双向控制的,子组件改数据的时候父组件也能接收到数据变化,因为子组件改的时候不是在改数据,而是在改数据里的内容,也就是说引用类型数据的地址始终没有变化,不算改父组件数据

    父子间数据共享(双向控制)

  3. 父组件可以将一个方法传递给子组件,子组件调用这个方法的时候,就可以给父组件传递数据

    父组件被动的接收子组件的数据

  4. 父组件可以将一个事件绑定在子组件的身上,这个事件的处理程序是父组件某一个方法,当子组件触发自己的这个被绑定的事件的时候,相当于触发了父组件的方法

    父组件被动的接收子组件的数据

  5. 在组件间可以用过ref形成ref链,组件还拥有一个关系链($parent,$children,$root),通过这两种链;理论来说,任意的两个组件都可以互相访问,互相进行通信

    任意组件通信,用的少...

  6. event bus 事件总线 专注于非父子组件的通信,其实父子组件也可以使用,只是没有必要

    在B组件的某个钩子函数为event_bus绑定一个事件,事件的处理程序是B想做的事情

    在A组件的某一个操作里,触发event_bus绑定的事件

  7. 大量组件间数据共享的时候 vuex

组件的生命周期

每一个组件或者实例都会经历一个完整的生命周期,总共分为三个阶段:初始化、运行中、销毁

生命周期图示

  1. 实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载,只是一个空壳,无法访问到数据和真实的dom,一般不做操作

  2. 挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,这里是渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

  3. 接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,这里是渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

  4. 接下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情...

  5. 当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿

  6. 当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom

  7. 当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等

  8. 组件的数据绑定、监听...去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以

以上是关于vue的组件和生命周期的主要内容,如果未能解决你的问题,请参考以下文章

vue组件生命周期

Vue-的父组件和子组件生命周期钩子函数执行顺序

四大组件之Service生命周期

Vue 的父组件和子组件生命周期钩子执行顺序

vue组件的生命周期详解

androidx.lifecycle 生命周期感知型组件实现原理