Vue3-生命周期

简介: Vue3-生命周期

选项式API中将 beforeDestroy 以及 destroyed 修改为 beforeUnmount 和 unmounted,其余一致

如果是vue2的生命周期钩子函数 errorCaptured

完整案例: 03_lifeCycle/01_lifeCycle_vue2.html 官方解释

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>vue2的生命周期钩子函数</title>
</head>
<body>
  <div id="app">
    <button @click="add">加1</button> {{ count }}
  </div>
</body>
<script src="../lib/vue.js"></script>
<script>
  /**
   * mounted  *****  数据请求,DOM操作,定时器,计时器等,实例化,订阅数据
   * created  ***    数据请求
   * updated  *
   * beforeDestroy ****  消除定时器 记时器 取消数据订阅等
   * */
  const app = new Vue({
    data: {
      count: 0
    },
    methods: {
      add () {
        this.count++
        if (this.count === 5) {
          this.$destroy()
        }
      }
    },
    beforeCreate () { // 备孕
      // 在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用
      console.log('beforeCreate')
    },
    created () { // 怀上了
      // 在实例创建完成后被立即同步调用。在这一步中,实例已完成对选项的处理,意味着以下内容已被配置完毕:数据侦听、计算属性、方法、事件/侦听器的回调函数。然而,挂载阶段还没开始,且 $el property 目前尚不可用。
      console.log(this.$el)
      console.log('created')
    },
    beforeMount () {// 生下来以前
      // 在挂载开始之前被调用:相关的 render 函数首次被调用。
      console.log('beforeMount')
    },
    mounted () { // 生下了
      // 实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。
      // 如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。
      console.log(this.$el)
      console.log('mounted')
    },
    beforeUpdate () {
      // 在数据发生改变后,DOM 被更新之前被调用。
      // 这里适合在现有 DOM 将要被更新之前访问它,比如移除手动添加的事件监听器。
      console.log('beforeUpdate')
    },
    updated () { 
      // 在数据更改导致的虚拟 DOM 重新渲染和更新完毕之后被调用。
      console.log('updated')
    },
    beforeDestroy () {
      // 实例销毁之前调用。在这一步,实例仍然完全可用。
      console.log('beforeDestroy')
    },
    destroyed () { // gg
      // 实例销毁后调用。该
      console.log('destroyed')
    }
  })
  app.$mount('#app')
</script>
</html>


03_lifeCycle/02_lifeCycle_vue3.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>vue3的生命周期钩子函数</title>
</head>
<body>
  <div id="app">
    <button @click="add">加1</button> {{ count }}
  </div>
</body>
<script src="../lib/vue.global.js"></script>
<script>
  /**
   * mounted  *****  数据请求,DOM操作,定时器,计时器等,实例化,订阅数据
   * created  ***    数据请求
   * updated  *
   * beforeUnmount ****  消除定时器 记时器 取消数据订阅等
   * */
  const app = Vue.createApp({
    data () {
      return {
        count: 0
      }
    },
    methods: {
      add () {
        this.count++
        if (this.count === 5) {
          app.unmount()
        }
      }
    },
    beforeCreate () { // 备孕
      console.log('beforeCreate')
    },
    created () { // 怀上了
      console.log('created')
    },
    beforeMount () {// 生下来以前
      console.log('beforeMount')
    },
    mounted () { // 生下了
      console.log('mounted')
    },
    beforeUpdate () {
      console.log('beforeUpdate')
    },
    updated () { 
      console.log('updated')
    },
    beforeUnmount () {
      console.log('beforeDestroy')
    },
    unmounted () { // gg
      console.log('destroyed')
    }
  })
  app.mount('#app')
</script>
</html>


03_lifeCycle/03_lifeCycle_vue3.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>vue3的生命周期钩子函数</title>
</head>
<body>
  <div id="app">
    <button @click="add">加1</button> {{ count }}
  </div>
</body>
<script src="../lib/vue.global.js"></script>
<script>
  /**
   * mounted  *****  数据请求,DOM操作,定时器,计时器等,实例化,订阅数据
   * created  ***    数据请求
   * updated  *
   * beforeUnmount ****  消除定时器 记时器 取消数据订阅等
   * */
  const { createApp, ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } = Vue
  const app = createApp({
    setup () {
      const count = ref(0)
      onBeforeMount(() => {
        console.log('onBeforeMount')
      })
      onMounted(() => {
        console.log('onMounted')
      })
      onBeforeUpdate(() => {
        console.log('onBeforeUpdate')
      })
      onUpdated (() => {
        console.log('onUpdated')
      })
      onBeforeUnmount(() => {
        console.log('onBeforeUnmount')
      })
      onUnmounted(() => {
        console.log('onUnmounted')
      })
      const add = () => {
        count.value += 1
        if (count.value === 5) {
          app.unmount()
        }
      }
      return {
        count, add
      }
    }
  })
   app.mount('#app')
</script>
</html>


目录
相关文章
|
22天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
126 64
|
22天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
101 60
|
28天前
|
监控 JavaScript 前端开发
vue学习第十二章(生命周期)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。本文深入探讨了Vue实例的生命周期,从初始化到销毁各阶段的关键钩子函数及其应用场景,帮助你更好地理解Vue的工作原理。如果你觉得有帮助,欢迎关注我,将持续分享更多优质内容!🎉🎉🎉
22 1
vue学习第十二章(生命周期)
|
22天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
28 8
|
21天前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
21 1
|
21天前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
32 1
|
22天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
1月前
|
JavaScript 索引
Vue 3.x 版本中双向数据绑定的底层实现有哪些变化
从Vue 2.x的`Object.defineProperty`到Vue 3.x的`Proxy`,实现了更高效的数据劫持与响应式处理。`Proxy`不仅能够代理整个对象,动态响应属性的增删,还优化了嵌套对象的处理和依赖追踪,减少了不必要的视图更新,提升了性能。同时,Vue 3.x对数组的响应式处理也更加灵活,简化了开发流程。
|
25天前
|
JavaScript 前端开发 API
从Vue 2到Vue 3的演进
从Vue 2到Vue 3的演进
37 0
|
25天前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
54 0