Vue的生命周期的详解

Vue的生命周期的详解Vue 的生命周期 Vue 的生命周期是每个使用 Vue 框架的前端人员都需要掌握的知识 以此作为记录 Vue 的生命周期就是 vue 实例从创建到销毁的全过程 也就是 newVue 开始就是 vue 生命周期的开始 Vue 实例有 个完整的 命周期 也就是从开始创建 初始化数据 编译模版 挂载 Dom gt 渲染 更新 gt 渲染 卸载等 系列过程 称这是 Vue 的 命周期 钩子函数是 Vue 生命周期中每个阶段对外开放让程序员操作 Vue 的接口 Vue 有 8 个钩子函数 分别为 beforeCreate 创建前

Vue的生命周期

beforeCreate( 创建前 )

这个时候,在实例被完成创建出来,el和data都没有初始化,不能访问data、method,一般在这个阶段不进行操作。

beforeCreate() { 
    console.log('----beforeCreate----') console.log(this.msg) //undefined console.log(this.$el) //undefined }, 

created( 创建后 )

这个时候,vue实例中的data、method已被初始化,属性也被绑定,但是此时还是虚拟dom,真是dom还没生成,$el 还不可用。这个时候可以调用data和method的数据及方法,created钩子函数是最早可以调用data和method的,故一般在此对数据进行初始化。

created() { 
    console.log('----created----') console.log(this.msg) //msg console.log(this.$el) //undefined }, 

beforeMount( 挂载前)

,故所以,beforeMount读取不了真实的el,在mounted才能读取到真实的el,因为el只有渲染完成后才会存在。这里讲的el是真实的el。在真实的el之前存在前,在beforeMount中的其实是页面中的#app,是挂载的目标。

在这里插入图片描述
在这里插入图片描述

  beforeMount() { 
          
    console.log('----beforeMount----')
    console.log(this.msg)	//msg
    console.log(this.$el)	//undefined
  },

Mounted( 挂载后)

此时模板已经被渲染成真实DOM,用户已经可以看到渲染完成的页面,页面的数据也是通过双向绑定显示data中的数据。 这实例创建期间的最后一个生命周期函数,当执行完 mounted 就表示,实例已经被完全创建好了,此时,如果没有其它操作的话,这个实例,就静静的躺在我们的内存中,一动不动。

mounted() { 
          
    console.log('----mounted----')
    console.log(this.msg)	//msg
    console.log(this.$el)	// 
          
},

创建Vue实例的示例

<template>
  <div id="app">
    <span :model="msg"></span>
  </div>
</template>

<script>
export default { 
          
  name: 'App',
  data() { 
          
    return { 
          
      msg: 'msg',
    }
  },
  beforeCreate() { 
          
    console.log('----beforeCreate----')
    console.log(this.msg) //msg
    console.log(this.$el) //undefined
  },
  created() { 
          
    console.log('----created----')
    console.log(this.msg)
    console.log(this.$el)
  },
  beforeMount() { 
          
    console.log('----beforeMount----')
    console.log(this.msg)
    console.log(this.$el)
  },
  mounted() { 
          
    console.log('----mounted----')
    console.log(this.msg)
    console.log(this.$el)
  },
}
</script>

在这里插入图片描述

beforeUpdate

更新前状态(view层的数据变化前,不是data中的数据改变前),重新渲染之前触发,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染。只有view上面的数据变化才会触发beforeUpdate和updated,仅属于data中的数据改变是并不能触发。

updated

数据已经更改完成,dom也重新render完成。

更新实例

<template>
  <div id="app">
    <div style="height:50px"
         ref="spanRef">{ 
          { 
          msg}}</div>
    <button @click="clickBtn"></button>
  </div>
</template>

<script>
export default { 
          
  name: 'App',
  data() { 
          
    return { 
          
      msg: 'msg',
    }
  },
  methods: { 
          
    clickBtn() { 
          
      this.msg = 'newMsg'
    },
  },
  beforeUpdate() { 
          
    console.log('----beforeUpdate----')
    console.log(this.$refs.$el)
    console.log(this.msg) //msg
  },
  updated() { 
          
    console.log('----updated----')
    console.log(this.$refs.$el)

    console.log(this.msg) //msg
  },
}
</script>
 beforeUpdate() { 
          
    console.log('----beforeUpdate----')
    console.log(this.$el)
    console.log(this.msg) //msg
    for (var i = 0; i <= 10000; i++) { 
          
      console.log(1)
    }
  },

在这里插入图片描述
在这里插入图片描述
this.$el会等到数据更新完成才对el进行输出。




beforeDestroy

销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后:清除计时器、清除非指令绑定的事件等等…’)

destroyed

销毁后 (Dom元素存在,只是不再受vue控制),卸载watcher,事件监听,子组件。






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177551.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:15
下一篇 2026年3月26日 下午7:15


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号