解析-vue的生命周期

1.new vue()

        new Vue()是实例化一个Vue实例,它内部执行了根实例的初始化过程。具体包括:选项合并(用户选项、默认选项)、$children、$refs、$slots、$createElement 等实例属性和方法初始化、自定义事件处理、数据响应式处理、生命周期钩子调用、可能的挂载。

2.Init events&lifecycle

       初始化事件和生命周期。这个过程中分别调用了3个初始化函数( initLifecycle(), initEvents(), initRender() ),分别初始化了生命周期,事件以及定义createElement函数,初始化生命周期时定义了一些属性,如表示当前生命周期状态的 _isMounted ,_isDestroyed ,_isBeingDestroyed,表示keep-alive中组件状态的_inactive等,而初始化event时,实际上就是定义了$once、$off、$emit、$on几个函数。而createElement函数是在初始化render时定义的(调用了initRender函数)。此时的data、methods、el等等都不存在,还没有初始化数据。

3.beforeCreate()

        beforeCreate函数是创建实例之前执行的钩子事件。此钩子函数运行时,数据还没有挂载,vue只是一个空壳,无法访问数据和$el,computed 和 watch 的数据也不能访问,输出data和methods中的数据是空的。 

接下来是数据初始化阶段

4.init injections&reactivity

        初始化注入事件和反射。在这个阶段初始化数据和事件,包括data和methods,但是还没编译模板。

injections,依赖注入,vue中有provide和inject,可以将父组件provide中的对象注入到子孙的属性中。
reactive,将数据包装成一种可观测的类型,当数据产生变更的时候,我们能够感知到。这个操作后data数据应该就可以是响应的了。

5.created()

        实例创建完成后执行的钩子事件。此时可以使用created钩子函数获取到vue中初始化的数据。此时组件实例创建完成,属性和方法已绑定,但是DOM还未生成执行的钩子函数,挂载未开始,模板还没有渲染成html。

接下来是模板编译阶段

6.①判断 el 的挂载方式

        检查vue配置,即new Vue{}里面的el项是否存在。有就继续检查template项;没有则手动调用 vm.$mount(el) 挂载。

// 一般vue项目的main.js里面是这样的
export default new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})

// 有些vue项目中用的是这样的
export default new Vue({
  router,
  store,
  i18n,
  render: h => h(App)
}).$mount('#app')


// 后者,就相当于是手动调用了$mount了

   ②选择 模板template 的编译方式

        把data对象里的数据和vue语法声明的模板编译成浏览器可读的HTML。检查配置中的template项,有template就将template模板转换成render函数 ;如果没有template就直接将获取到的el(也就是我们常见的#app,#app里面可能还会有其他标签)编译成templae, 然后在将这个template转换成render函数。此时在内存中生成虚拟DOM,但是不会挂载到页面中。

7.beforeMount()

        位于编译模板阶段的钩子函数,在这里可以进行一般数据的获取和更改,同 created() 函数一样更改数据不会触发update和其他钩子函数。这个阶段是在内存中生成了虚拟DOM,但是还没有挂载到页面中。(编译完成的HTML挂载到虚拟DOM上)

接下来是挂载阶段

8.Create vm.$el and replace “el” with it

        将编译好的HTML替换掉el所指向的DOM。此时在内存中的虚拟DOM挂载到了浏览器的页面上(编译好的HTML就挂载到页面),真实的DOM就挂载完毕了,数据完成双向绑定,可以访问DOM节点,使用$refs对DOM进行操作。

9.mounted()

        挂载完成后执行的钩子事件。在此函数内是可以操作到DOM的。注意:这个事件在整个实例中只执行一次。

如果修改数据

10.beforeUpdate()

        更改data数据后,当虚拟DOM中的data发生改变时触发。此时虚拟DOM没有加载到页面上,页面上的数据不变,虚拟DOM中的数据改变。

11.updated()

        更改data数据之后,虚拟DOM中的data发生改变,页面上的data也发生改变(即新生成的虚拟DOM挂载上页面了)。

实例销毁阶段

12.beforeDestroy()

        销毁前执行的钩子函数,可以继续使用vue实例中的数据,如data,methods,filters,derictives等等。

13.destroyed()

        销毁已执行完毕(已经拆除了数据监听、子组件和事件监听),vue实例中的数据不可用了。

以下函数做补充说明

14.①actived()

                keep-alive组件激活时

     ②deactived()

                keep-alive组件隐藏时 ;v-if="false"激活时

15.errorCaptured()

        捕获异常时触发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 和 Vue 是两个流行的 JavaScript 框架,它们都有自己的生命周期方法。React 的生命周期方法包括: 1. Mounting:组件被创建并且插入到 DOM 中。 - constructor: 组件构造函数 - getDerivedStateFromProps: 从 props 中获取派生状态 - render: 渲染组件 - componentDidMount: 组件挂载到 DOM 上 2. Updating:组件更新,可以是 props 或者 state 的改变。 - getDerivedStateFromProps: 从 props 中获取派生状态 - shouldComponentUpdate: 判断是否需要重新渲染组件 - render: 渲染组件 - componentDidUpdate: 组件更新完成 3. Unmounting:组件被从 DOM 中移除。 - componentWillUnmount: 组件移除前的清理工作 Vue生命周期方法包括: 1. Creation:创建阶段,包括实例化、数据观测、模板解析、编译等。 - beforeCreate: 实例创建前调用 - created: 实例创建后调用 - beforeMount: 模板编译/挂载前调用 2. Mounting:挂载阶段,包括模板编译、挂载、渲染等。 - mounted: 模板编译/挂载后调用 3. Updating:更新阶段,包括响应式数据更新、虚拟 DOM 重构、渲染等。 - beforeUpdate: 组件更新前调用 - updated: 组件更新后调用 4. Destruction:销毁阶段,包括实例销毁前的清理工作等。 - beforeDestroy: 实例销毁前调用 - destroyed: 实例销毁后调用 总的来说,React 和 Vue生命周期方法有一些相似之处,但是也存在一些差异。React 有一个 shouldComponentUpdate 方法来判断是否需要重新渲染组件,Vue 则没有这个方法,但是提供了一个 watch 选项来观察数据的变化。另外,React 的生命周期方法是在组件的 class 中定义的,而 Vue生命周期方法则是在 Vue 实例中定义的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值