【vue2】vue生命周期的理解

这篇具有很好参考价值的文章主要介绍了【vue2】vue生命周期的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

🥳博       主:初映CY的前说(前端领域)

🌞个人信条:想要变成得到,中间还有做到!

🤘本文核心:vue生命周期的介绍、vue生命周期钩子函数详解,vue生命周期的执行顺序


目录

一、生命周期介绍

二、生命周期的构成

1. 生命周期的四个阶段 :

2.八大钩子作用:

1.beforeCreate():

2.created()

3.beforeMont()

4.monted()

5.beforeUpdata()

6.updated()

7.beforeDestroy()

8.destroyed()

三、执行顺序


一、生命周期介绍

概念:

即一个组件从创建到销毁的一个完整的过程

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

二、生命周期的构成

钩子概念: vue从创建到销毁过程中,会执行的一些回调函数

1. 生命周期的四个阶段 :

  •  初始化阶段:  beforeCreate、 created
  •  挂载阶段 : beforeMount、mounted
  •  更新阶段 : beforeUpdate、updated
  •  销毁阶段:  beforeDestroy、destroyed
执行顺序 钩子函数 执行时机
1 beforeCreate(){}

vue实例创建了,但是el和data还没有创建 (准备创建data)

底层(初始化vue实例,初始化钩子函数,初始化一些事件和侦听器配置项)

2 created() {}

data数据创建了,但是el挂载点还没有创建 (准备创建el)

底层:初始化data中的数据和methods中的方法

3 beforeMount() {}

el挂载点创建了,但是data数据还没有渲染(准备渲染中)

底层:创建el挂载点,并且生成虚拟DOM

4 mounted() {}

data数据 第一次 渲染完毕 (完成初始渲染)

底层:将虚拟dom渲染成真实DOM

5 beforeUpdate() {} 检测到data数据变化,但是还没有开始重新渲染 (data变了,准备重新渲染中) 会执行多次
6 updated() {} 变化后的data数据 ,完成渲染到页面 (完成重新渲染,会重复执行
7 beforeDestroy() {}

vue实例销毁即将销毁(解除data与el的关联),之后修改data,页面不会被渲染

底层 : 解除 事件绑定、侦听器、组件

8 destroyed() {}

vue实例已经销毁

2.八大钩子作用:

[前置准备]先创建一个空的vue文件,写入我们需要的素材

<template>
  <div>
    <button @click=" name='李四' ">点我改名字</button>
    <button @click="$destroy()">点我销毁</button>
    <p>{{ name }}</p>
    <p>{{ age }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: "张三",
      age: 20
    };
  }
};
</script>

<style>
</style>

上述页面浏览效果如下:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap


1.beforeCreate():

  • vue实例创建了,但是el和data还没有创建 (准备创建data)
  • 底层(初始化vue实例,初始化钩子函数,初始化一些事件和侦听器配置项)
/* 生命周期钩子 */
// 1. beforeCreate() :  创建了vue实例,但是还没有创建data  
beforeCreate() {
    console.log(1);
    console.log(this);
    console.log(this.name);
  }

写入beforeCreate页面效果查看:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

我们是生成了初始的vue实例,但是我们存放在data中的数据没有取到

2.created()

  • 创建初始了data,但是还没有挂载
  • 经典应用 : 页面一加载, ajax请求数据渲染页面。一般写在这个钩子里面
  // 2.created() : 创建了data,但是还没有挂载
  /* 常用: 最早可以获取data的钩子, 一般在这个钩子发送ajax */
  created() {
    console.log(2);
    console.log(this);
    console.log(this.name);
    console.log(this.$el);
  }

写入created页面效果查看:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

此时我们存放在data中的数据被找到了 ,但是我们的挂载点没有被找到

3.beforeMont()

  • 创建挂载点,但是还没有把data挂载到el
// 3.beforeMount() : 创建挂载点,但是还没有把data挂载到el
  beforeMount() {
    console.log(3);
    console.log(this);
    // html环境,这个钩子$el可以获取挂载点。  脚手架环境, 这个钩子$el获取的是undefined
    console.log(this.$el);
    const p = document.querySelector("p");
    console.log(p); //null 没有渲染,所以无法获取dom
  }

 写入beforeMont页面效果查看:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

这一步是生成创建我们的挂载点 

4.monted()

  • 完成初始渲染。 把data数据渲染到挂载点el
  • 经典应用 : 一般常用于操作dom(页面一家在需要操作DOM在这个钩子上)
  mounted() {
    console.log(4);
    console.log(this);
    console.log(this.$el);
    const p = document.querySelector("p");
    console.log(p); // p标签 完成渲染
  }

  写入monted页面效果查看:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

我们的挂载点创建成功,讲我们data中的数据存放进去并渲染成功啦!


经历了上述的四个阶段的操作现在我们完成了组件data中的被数据获取到页面渲染的整个流程,接下来的钩子是用于修改data数据与销毁我们的vue实例

5.beforeUpdata()

  •  检测到data数据发生变化,但是还没有更新el
  • 检测data数据变化, 修改虚拟DOM
  • 当有data数据改变 – 重复这个循环( beforeUpdata()与updated() )

 写入beforeUpdata页面效果查看:

 第一步:先在我们的vue中打一个debuddgr断点,防止我们走到updataed的位置

  beforeUpdate() {
    console.log(5);
    console.log(this);// 获取的是变化后的数据, 但是页面还是显示之前的数据
    debugger
  }

第二步:我们现在在vuetools中修改data中的数据,当修改数据后面不变化!当我确定的时候会依旧变成张三。但是我们的内存中会显示出我们修改过的内容

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

 可以看到我们的vue实例对象中的name被我们成功的修改了,但是大家看右上角的张三,并没有被我们修成。

【再次验证】这是我们直接修改data中的数据,当我们点击 “点我改名字”这个按钮的时候也会出现

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

之后我们卡在这里了,当我们点击箭头的时候,我们的vue就更新了 

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

6.updated()

  • 更新之后的data,完成渲染
  • 完成data渲染(将虚拟DOM渲染成真实DOM)
  // 6.updated(): 更新之后的data,完成渲染
  updated() {
    console.log(6);
    console.log(this);
  }

 写入updated页面效果查看:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

显而易见当我们修改之后我们的数据马上就渲染到页面上了。实现了彻底更新的操作

7.beforeDestroy()

  •  正在销毁(接触data与el绑定、移除事件监听、移除侦听器)
      触发销毁钩子的两个条件 
      (1)对组件使用v-if
      (2)调用组件的 this.$destroy() 

 写入beforeDestroy页面效果查看:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

我们的vue实例正在被销毁

8.destroyed()

  • 完成销毁
    //8.destroyed(): 完成销毁
    destroyed() {
    console.log(8);
    console.log(this);
  }

   写入destroy页面效果查看:vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

至此我们的vue实例对象从出生创建到销毁喽

上述操作的源代码见下:

App.vue

<template>
  <div>
    <button @click="name = '李四'">点我改名字</button>
    <button @click="$destroy()">点我销毁</button>
    <p>{{ name }}</p>
    <p>{{ age }}</p>


  </div>
</template>
<script>
export default {
  data() {
    return {
      name: '张三',
      age: 20,
    }
  },

  /* 生命周期钩子 */
  // 1. beforeCreate() :  创建了vue实例,但是还没有创建data
  beforeCreate() {
    console.log(1)
    console.log(this)
    console.log(this.name)
  },
  // 2.created() : 创建了data,但是还没有挂载
  /* 常用: 最早可以获取data的钩子, 一般在这个钩子发送ajax */
  created() {
    console.log(2)
    console.log(this)
    console.log(this.name)
    console.log(this.$el)
  },
  // 3.beforeMount() : 创建挂载点,但是还没有把data挂载到el
  beforeMount() {
    console.log(3)
    console.log(this)
    // html环境,这个钩子$el可以获取挂载点。  脚手架环境, 这个钩子$el获取的是undefined
    console.log(this.$el)
    const p = document.querySelector('p')
    console.log(p) //null 没有渲染,所以无法获取dom')
  },
  // 4.mounted() : 完成初始渲染。 把data数据渲染到挂载点el
  /* 常用: 最早可以操作DOM的钩子 */
  mounted() {
    console.log(4)
    console.log(this)
    console.log(this.$el)
    const p = document.querySelector('p')
    console.log(p) // p标签 完成渲染
  },
  // 5.beforeUpdate() : 检测到data数据发生变化,但是还没有更新el
  beforeUpdate() {
    console.log(5)
    console.log(this) // 获取的是变化后的数据, 但是页面还是显示之前的数据
    // eslint-disable-next-line no-debugger
    debugger
  },
  // 6.updated(): 更新之后的data,完成渲染
  updated() {
    console.log(6)
    console.log(this)
  },
  // 7.beforeDestroy(): 正在销毁(接触data与el绑定、移除事件监听、移除侦听器)
  /*触发销毁钩子的两个条件 
  (1)对组件使用v-if
  (2)调用组件的 this.$destroy() 
  */
  beforeDestroy() {
    console.log(7)
    console.log(this)
    // eslint-disable-next-line no-debugger
  },
  //8.destroyed(): 完成销毁
  destroyed() {
    console.log(8)
    console.log(this)
  },
}
</script>

<style>
</style>

三、执行顺序

即按照我们介绍钩子函数的顺序依次往下执行

App.vue

<template>
  <div>
    <!-- 导入子组件 -->
    <son></son>
  </div>
</template>
<script>

import son from '@/components/son.vue'
export default {
  components: { son },


  /* 生命周期钩子 */
  // 1. beforeCreate() :  创建了vue实例,但是还没有创建data
  beforeCreate() {
    console.log('父的beforeCreate')
  },
  // 2.created() : 创建了data,但是还没有挂载
  /* 常用: 最早可以获取data的钩子, 一般在这个钩子发送ajax */
  created() {
    console.log('父的Created')
  },
  // 3.beforeMount() : 创建挂载点,但是还没有把data挂载到el
  beforeMount() {
    console.log('父的beforeMount')
  },
  // 4.mounted() : 完成初始渲染。 把data数据渲染到挂载点el
  /* 常用: 最早可以操作DOM的钩子 */
  mounted() {
    console.log('父的Mounted')
  },
}
</script>

<style>
</style>

 son.vue

<!-- eslint-disable vue/multi-word-component-names -->
<template>
  <div>
  </div>
</template>

<script>
export default {

  beforeCreate() {
    console.log('子的beforeCreate')
  },
  // 2.created() : 创建了data,但是还没有挂载
  /* 常用: 最早可以获取data的钩子, 一般在这个钩子发送ajax */
  created() {
    console.log('子的Created')
  },
  // 3.beforeMount() : 创建挂载点,但是还没有把data挂载到el
  beforeMount() {
    // html环境,这个钩子$el可以获取挂载点。  脚手架环境, 这个钩子$el获取的是undefined
    console.log('子的beforeMount')
  },
  // 4.mounted() : 完成初始渲染。 把data数据渲染到挂载点el
  /* 常用: 最早可以操作DOM的钩子 */
  mounted() {
    console.log('子的Mounted')
  },

}
</script>

<style>

</style>

 我们跑一下看下执行效果:

vue2生命周期执行顺序,vue2,javascript,vue.js,前端框架,前端,bootstrap

 发现是我们父元素先执行到beforeMont,随后等子渲染完成(执行子的mounted)最后将父的mounted执行完成,完成我们最终的渲染。虽然是有包含关系,但是执行流程是不变的。文章来源地址https://www.toymoban.com/news/detail-782765.html

到了这里,关于【vue2】vue生命周期的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue2的生命周期(详解)

    Vue实例的生命周期: 从创建到销毁的整个过程 Vue框架内置函数,随着组件的生命周期阶段,自动执行 作用:特定的时间点,执行特定的操作 分类:四大阶段 八大方法 new Vue() – Vue实例化(组件也是一个小的Vue实例) Init Events Lifecycle – 初始化事件和生命周期函数 beforeCreate – 生命周期

    2024年02月03日
    浏览(69)
  • vue页面和组件的生命周期顺序

    想了很久的一个问题  为什么有时候页面传递数据给组件  组件渲染不出来   但是打印生命周期函数 在页面的beforecreate生命周期获取数据 在组件mounted中渲染 理论上来说是没问题的   原来是网络请求需要时间  有可能是没有获取到数据的时候  空数据已经传递给组件了 需

    2024年01月18日
    浏览(40)
  • React和Vue生命周期、渲染顺序

    目录 对比 命名规则 react:componentWillXxx,componentDidXxx vue2:beforeXxx,xxxed vue3:onBeforeXxx,onXxxed 生命周期 应用 created(vue2)(此时可访问this,更早地响应):ajax请求 mounted:操作dom(初始化节点、事件监听、副作用、ajax、网络请求) WillUnmount:清除 timer,取消ajax、网络请求

    2024年02月16日
    浏览(46)
  • vue2 生命周期,工程化开发入门

    1.生命周期 生命周期介绍 生命周期的四个阶段 生命周期钩子 声明周期案例 2.工程化开发入门 工程化开发和脚手架 项目运行流程 组件化 组件注册 思考:什么时候可以发送初始化渲染请求?(越早越好)什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期:就是一

    2024年02月11日
    浏览(62)
  • vue2的生命周期详解(代码演示+源码)

            生命周期是指从开始创建、初始化数据、编译模版、挂载 Dom - 渲染、更新 - 渲染、卸载等一系列过程,我们称这是 Vue 的生命周期,它主要强调一个时间段。用一句话来概括就是: Vue实例的生命周期: 从创建到销毁的整个过程 Vue框架内置函数,随着组件的生命周期阶

    2024年02月04日
    浏览(50)
  • Vue2 的@hook 、 hook: 与生命周期

    优点:简单易上手 缺点:此种方法子组件必须是自己编写的组件,若引用第三方库这种方式则不可行 官方文档并没有太多相关解释,只在处理边界情况 #程序化的事件侦听器— Vue.js (vuejs.org)里有出现。 子组件无需相关处理就能实现侦听,这块的实现原理可以从源码里探究部

    2024年02月05日
    浏览(48)
  • Vue2和Vue3生命周期映射关系及异同

    beforeCreate - 使用 setup() created - 使用 use setup() beforeMount -onBeforeMount mounted - onMounted beforeUpdate - onBeforeUpdate updated - onUpdated beforeDestroy- onBeforeUnmount destroyed -onUnmounted activated - onActivated deactivated - onDeactivated errorCaptured - onErrorCaptured beforeCreate - 使用 setup() 函数替代 Vue 2 中的 beforeCrea

    2024年01月24日
    浏览(51)
  • 微信小程序:uni-app页面Page和组件Component生命周期执行的先后顺序

    文档 页面生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle 组件生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#componentlifecycle 经测试,得出结论: H5和微信小程序的生命周期函数调用顺序不一致 一般情况下,主要使用的周期函数如下,他们的执行顺序是固定的 页面 组件

    2024年02月08日
    浏览(58)
  • JavaScript函数变量的生命周期,自执行函数、闭包、反转数组案例及冒泡排序案例

    一、变量的生命周期 JavaScript 变量的生命期从它们被声明的时间开始。 局部变量会在函数运行以后被删除。 全局变量会在页面关闭后被删除。 二、自执行函数 执行函数通常都是定义之后立即执行,以后都不再会调用,所以声明时可以省略函数名,因此自执行函数又叫匿名函

    2024年02月06日
    浏览(47)
  • Vue2(生命周期,列表排序,计算属性和监听器)

    前言 上一章博客我们讲解了Vue基础 这一章我们来讲Vue生命周期,列表过滤,计算属性和监听器 一,生命周期 通常也叫生命周期回调函数、生命周期函数、生命周期钩子 vue初始化时在不同的阶段调用的不同函数 生命周期函数的 this 指向为vue实例,名字不能更改 1.1,生命周期函

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包