vue生命周期
每个Vue实例在被创建时都要经过一系列的初始化过程,例如:需要设置数据的监听,编译模板,将实例挂载到DOM上,并且在数据变化时更新DOM等,这些过程统称为Vue实例的生命周期。同时在这个过程中也会运行一些叫做生命周期钩子的函数。
1.beforeCreate(创建前):数据监测(getter和setter)和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。
2.created(创建后):实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到 DOM,可以在该阶段发送异步的请求,获取数据。
3.beforeMount(挂载前):在挂载开始之前被调用,相关的render函数首次被调用。此阶段Vue开始解析模板,生成虚拟DOM存在内存中,还没有把虚拟DOM转换成真实DOM,插入页面中。所以网页不能显示解析好的内容。
4.mounted(挂载后):在el被新创建的 vm.$el(就是真实DOM的拷贝)替换,并挂载到实例上去之后调用(将内存中的虚拟DOM转为真实DOM,真实DOM插入页面)。此时页面中呈现的是经过Vue编译的DOM,这时在这个钩子函数中对DOM的操作可以有效,但要尽量避免。一般在这个阶段进行:开启定时器,发送网络请求,订阅消息,绑定自定义事件等等
5.beforeUpdate(更新前):响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染(数据是新的,但页面是旧的,页面和数据没保持同步)。
6.updated(更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时 DOM 已经根据响应式数据的变化更新了。调用时,组件 DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
7.beforeDestroy(销毁前):实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。在这个阶段一般进行关闭定时器,取消订阅消息,解绑自定义事件。
8.destroyed(销毁后):实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。
keep-alive 独有的生命周期:分别为 activated 和deactivated。用 keep-alive 包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行 deactivated 钩子函数,命中缓存渲染后会执行 activated 钩子函数。
生命周期 | 描述 |
---|---|
beforeCreate | 组件实例被创建之初,可用于执行一些初始化任务 |
created | 组件实例已经完全创建,各种数据可以使用,可用于异步数据的获取 |
beforeMount | 组件挂载之前,dom未创建 |
mounted | 组件挂载到实例上去之后,初始化结束,dom已创建,可用于获取访问数据和dom元素 |
beforeUpdate | 组件数据发生变化,更新之前,可用于获取更新前各种状态 |
updated | 组件数据更新之后,所有状态已是最新 |
beforeDestroy | 组件实例销毁之前,可用于定时器或者订阅的取消 |
destroyed | 组件实例销毁之后 |
activated | keep-alive 缓存的组件激活时 |
deactivated | keep-alive 缓存的组件停用时调用 |
errorCaptured | 捕获一个来自子孙组件的错误时被调用 |
3.2 组件
组件表示页面中的部分功能(包含自己的逻辑与样式),可以组合多个组件实现完整的页面功能。
将组件当作一种函数或者是对象来考虑(函数的功能是单一的),根据单一功能原则来判定组件的范围。一个组件原则上只能负责一个功能。如果它需要负责更多的功能,这时候就应该考虑将它拆分成更小的组件。
组件的特点:
可复用:每个组件都是具有独立功能的,它可以被使用在多个场景中。
可组合:一个组件可以和其它的组件一起使用或者可以直接嵌套在另一个组件内部。
可维护:每个组件仅仅包含自身的逻辑,更容易被理解和维护。
vue生命周期
每个Vue实例在被创建时都要经过一系列的初始化过程,例如:需要设置数据的监听,编译模板,将实例挂载到DOM上,并且在数据变化时更新DOM等,这些过程统称为Vue实例的生命周期。同时在这个过程中也会运行一些叫做生命周期钩子的函数。
1.beforeCreate(创建前):数据监测(getter和setter)和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。
2.created(创建后):实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到 DOM,可以在该阶段发送异步的请求,获取数据。
3.beforeMount(挂载前):在挂载开始之前被调用,相关的render函数首次被调用。此阶段Vue开始解析模板,生成虚拟DOM存在内存中,还没有把虚拟DOM转换成真实DOM,插入页面中。所以网页不能显示解析好的内容。
4.mounted(挂载后):在el被新创建的 vm.$el(就是真实DOM的拷贝)替换,并挂载到实例上去之后调用(将内存中的虚拟DOM转为真实DOM,真实DOM插入页面)。此时页面中呈现的是经过Vue编译的DOM,这时在这个钩子函数中对DOM的操作可以有效,但要尽量避免。一般在这个阶段进行:开启定时器,发送网络请求,订阅消息,绑定自定义事件等等
5.beforeUpdate(更新前):响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染(数据是新的,但页面是旧的,页面和数据没保持同步)。
6.updated(更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时 DOM 已经根据响应式数据的变化更新了。调用时,组件 DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
7.beforeDestroy(销毁前):实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。在这个阶段一般进行关闭定时器,取消订阅消息,解绑自定义事件。
8.destroyed(销毁后):实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。
keep-alive 独有的生命周期:分别为 activated 和deactivated。用 keep-alive 包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行 deactivated 钩子函数,命中缓存渲染后会执行 activated 钩子函数。
生命周期 | 描述 |
---|---|
beforeCreate | 组件实例被创建之初,可用于执行一些初始化任务 |
created | 组件实例已经完全创建,各种数据可以使用,可用于异步数据的获取 |
beforeMount | 组件挂载之前,dom未创建 |
mounted | 组件挂载到实例上去之后,初始化结束,dom已创建,可用于获取访问数据和dom元素 |
beforeUpdate | 组件数据发生变化,更新之前,可用于获取更新前各种状态 |
updated | 组件数据更新之后,所有状态已是最新 |
beforeDestroy | 组件实例销毁之前,可用于定时器或者订阅的取消 |
destroyed | 组件实例销毁之后 |
activated | keep-alive 缓存的组件激活时 |
deactivated | keep-alive 缓存的组件停用时调用 |
errorCaptured | 捕获一个来自子孙组件的错误时被调用 |
3.2 组件
组件表示页面中的部分功能(包含自己的逻辑与样式),可以组合多个组件实现完整的页面功能。
将组件当作一种函数或者是对象来考虑(函数的功能是单一的),根据单一功能原则来判定组件的范围。一个组件原则上只能负责一个功能。如果它需要负责更多的功能,这时候就应该考虑将它拆分成更小的组件。
组件的特点:
可复用:每个组件都是具有独立功能的,它可以被使用在多个场景中。
可组合:一个组件可以和其它的组件一起使用或者可以直接嵌套在另一个组件内部。
可维护:每个组件仅仅包含自身的逻辑,更容易被理解和维护。