vue学习笔记(五)——生命周期

一、Vue生命周期

1.1 Vue-生命周期

创建 销毁 的整个过程就是 – Vue实例的 - 生命周期

1.2 钩子函数

Vue 框架内置函数,随着组件的生命周期阶段,自动执行
作用:特定的时间点,执行特定的操作
场景::组件创建完毕后,可以在created 生命周期函数中发起Ajax 请求,从而初始化 data 数据
分类:4大阶段8个方法
如何知道Vue生命周期到达了什么阶段?
        使用钩子函数
钩子函数有哪些?
        初始化 / 挂载 / 更新 / 销毁

1.3 初始化

① new Vue() – Vue实例化(组件也是一个小的Vue实例)
② Init Events & Lifecycle – 初始化事件和生命周期函数
③ beforeCreate – 生命周期钩子函数被执行
④ Init injections&reactivity – Vue内部添加data和methods等
⑤ created – 生命周期钩子函数被执行, 实例创建
⑥ 接下来是编译模板阶段 –开始分析
⑦ Has el option? – 是否有el选项 – 检查要挂到哪里
        没有. 调用$mount()方法
        有, 继续检查template选项
Vue实例从创建到编译模板执行了哪些钩子函数?
        beforeCreate / created
created函数触发能获取data?
        能获取data, 不能获取真实DOM

1.4 挂载

① template选项检查
        有 - 编译template返回render渲染函数
        无 – 编译el选项对应标签作为template(要渲染的模板)
② 虚拟DOM挂载成真实DOM之前
③ beforeMount – 生命周期钩子函数被执行
④ Create … – 把虚拟DOM和渲染的数据一并挂到真实DOM上
⑤ 真实DOM挂载完毕
⑥ mounted – 生命周期钩子函数被执行
Vue实例从创建到显示都经历了哪些钩子函数?
        beforeCreate / created / beforeMount / mounted
created函数里, 能获取真实DOM吗?
        不能获取真实DOM
在什么钩子函数里可以获取真实DOM?
        mounted

1.5 更新

① 当data里数据改变, 更新DOM之前
② beforeUpdate – 生命周期钩子函数被执行
③ Virtual DOM…… – 虚拟DOM重新渲染, 打补丁到真实DOM
④ updated – 生命周期钩子函数被执行
⑤ 当有data数据改变 – 重复这个循环
什么时候执行updated钩子函数
        当数据发生变化并更新页面后
在哪可以获取更新后的DOM
        在updated钩子函数里

1.6 销毁

① 当$destroy()被调用 – 比如组件DOM被移除(例v-if)
② beforeDestroy – 生命周期钩子函数被执行
③ 拆卸数据监视器、子组件和事件侦听器
④ 实例销毁后, 最后触发一个钩子函数
⑤ destroyed – 生命周期钩子函数被执行
一般在beforeDestroy/destroyed里做什么?
        手动消除计时器/定时器/全局事件
​​​​​​​
<template>
  <div>
    <p>学习生命周期</p>
    <p>{{ msg }}</p>
    <p id="myP">这是我的p标签</p>
    <ul v-for="(item, index) in arr" :key="index">
      <li>{{ item }}</li>
    </ul>
    <button @click="arr.push(1000)">点击添加一个值 1000</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      msg: 'hello vue',
      arr: [1, 2, 5, 9],
      timer: null
    }
  },
  /** 一、初始化
   * new Vue() 以后,vue内部给实例对象添加了一些属性和方法,data和 methods 初始化之前
   * */
  beforeCreate () {
    console.log('beforeCreate执行了')
    console.log(this.msg) // undefined 访问不到 data 中的变量
  },
  /**
   * data 和 methods 初始化以后
   * 场景:网络请求,注册全局事件
   * */
  created () {
    console.log('created执行了')
    console.log(this.msg) // hello vue
    this.timer = setInterval(() => {
      console.log('定时器执行了。')
    }, 100)
  },
  /**
   * 二、挂载
   * 真实 DOM 挂载之前
   * 场景:预处理 data,不触发 updated 钩子函数
   * */
  beforeMount () {
    console.log('beforeMount执行了')
    console.log(document.querySelector('#myP')) // null 因为还未挂载真实dom,所以找不到dom元素
  },
  /**
   * 真实 dom 挂载以后
   * 场景:挂载后的真实 dom
   */
  mounted () {
    console.log('mounted执行了')
    console.log(document.querySelector('#myP')) // 可以找到真实p标签
  },
  /**
   * 三、更新
   * 前提:data 数据改变才执行
   * 跟新之前
  */
  beforeUpdate () {
    console.log('beforeUpdate执行了')
    console.log(document.querySelectorAll('ul li')[5]) // undefined,arr中数据改变之前执行,所以拿不到arr中的数据
  },
  /**
   * 更新之后
   * 场景:获取更新后的真实 dom 元素
  */
  updated () {
    console.log('updated执行了')
    console.log(document.querySelectorAll('ul li')[5])// li
  },
  /**
   * 四、销毁
   * 前提: v-if='false' 销毁 Vue 实例
   * 场景: 移除全局事件,移除当前组件,计时器,定时器,eventBus移除事件 $off 方法
   */
  beforeDestroy () {
    console.log('beforeDestroy执行了')
    clearInterval(this.timer)
  },
  destroyed () {
    console.log('destroyed执行了')
  }
}
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值