vue3.0生命周期的示例代码


Posted in Javascript onSeptember 24, 2020

在组件化的框架中,比如Angular、React或Vue,都为组件定义了生命周期这个概念,每个组件实例在被创建时都要经过一系列的初始化过程,例如:需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时,在这个过程中也会运行一些叫做生命周期钩子的函数,它们提供给用户在组件的不同阶段添加自己的代码的机会。
使用过Vue2.x的朋友肯定对它的生命周期钩子很熟悉了,因为在实际的开发过程中我们多多少少会用到他们,比如 created、mounted、destoryed等等。而在Vue3.0中,Vue2.x Options API形式的生命周期钩子函数和新的Composition API都可以使用,来看个示例代码就明白了:

const { onMounted } = Vue

const MyComp = {
  
  // Options API
  mounted() {
    console.log('>>>>>> mounted 1')
  },
  
  setup() {
    // Composition API
    onMounted(() => {
      console.log('++++++ mounted 2')
    })
  }
}

两种形式的生命周期函数可以共存(当然实际使用的时候最好只选用一种),它们都会被执行。Composition API形式的生命周期函数都是在 setup 方法中被调用注册。
最后,在实际的开发过程中,请注意一下Options API形式的组件生命周期钩子和Composition API之间的实际对应关系:

beforeCreate -> 请使用 setup()
created -> 请使用 setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
errorCaptured -> onErrorCaptured

整体代码如下:

const { createComponent, createApp, reactive } = Vue

// 计数器组件
const Counter = {
  props: {
    initCount: {
      type: Number,
      default: 0
    }
  },
  template: `
    <div class="counter-display">
      <span class="counter-label">恭喜你,你已经写了</span>
      <span class="counter-text">{{ state.count }}</span>
      <span class="counter-label">斤代码!</span>
    </div>
    <div class="counter-btns">
      <button class="btn" @click="increase">写一斤</button>
      <button class="btn" @click="reset">删库啦</button>
    </div>
  `,
  // 相当于 vue2.x beforeCreated, created
  setup(props) {
    const countOps = useCount(props.initCount)
    console.log("Counter ===> 相当于 vue2.x 中 beforeCreated, created")
    return { ...countOps }
  },
  onBeforeMount() {
    console.log("Counter ===> 相当于 vue2.x 中 beforeMount")
  },
  onMounted() {
    console.log("Counter ===> 相当于 vue2.x 中 mounted")
  },
  onBeforeUpdate() {
    console.log("Counter ===> 相当于 vue2.x 中 beforeUpdate")
  },
  onUpdated() {
    console.log("Counter ===> 相当于 vue2.x 中 updated")
  },
  onBeforeUnmount() {
    console.log("Counter ===> 相当于 vue2.x 中 beforeDestroy")
  },
  onUnmounted() {
    console.log("Counter ===> 相当于 vue2.x 中 destroyed")
  },
  onErrorCaptured() {
    console.log("Counter ===> 相当于 vue2.x 中 errorCaptured")
  }
}

function useCount(initCount) {
  const state = reactive({ count: initCount })
  console.log("state reactive", state)
  const increase = () => { state.count++ }
  const reset = () => { state.count = 0 }
  return { state, increase, reset }
}

// 创建一个 跟组件 app
const App = createComponent({
  // 这个就相对于 在另一个 .vue 文件 引用 Counter 组件,需要在 components 属性局部注册组件
  components: {
    Counter,
  },
  // 挂载到 App 模板中
  template: `
    <div class="container">
      <h3>计数器示例</h3>
      <Counter />
    </div>
  `,
  setup() {
    console.log("App ===> 相当于 vue2.x 中 beforeCreated, created")
  },
  onBeforeMount() {
    console.log("App ===> 相当于 vue2.x 中 beforeMount")
  },
  onMounted() {
    console.log("App ===> 相当于 vue2.x 中 mounted")
  },
  onBeforeUpdate() {
    console.log("App ===> 相当于 vue2.x 中 beforeUpdate")
  },
  onUpdated() {
    console.log("App ===> 相当于 vue2.x 中 updated")
  },
  onBeforeUnmount() {
    console.log("App ===> 相当于 vue2.x 中 beforeDestroy")
  },
  onUnmounted() {
    console.log("App ===> 相当于 vue2.x 中 destroyed")
  },
  onErrorCaptured() {
    console.log("Counter ===> 相当于 vue2.x 中 errorCaptured")
  }
})

// 启动
// container 就是相当于 new Vue() 中 el 元素
const container = document.querySelector("#app")
// createApp() 就是相当于 new Vue() 内部返回的就是 new Vue()
const app = createApp()
// 挂载组件
app.mount(App, container)

转载自:https://zhuanlan.zhihu.com/p/95968847

到此这篇关于vue3.0生命周期的示例代码的文章就介绍到这了,更多相关vue3.0生命周期内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
Dec 25 Javascript
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
Mar 05 Javascript
flash遮住div问题的正确解决方法
Feb 27 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
轻松实现Bootstrap图片轮播
Apr 20 Javascript
利用JS提交表单的几种方法和验证(必看篇)
Sep 17 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
Bootstrap3 模态框使用实例
Feb 22 Javascript
mpvue跳转页面及注意事项
Aug 03 Javascript
JavaScript数组去重实现方法小结
Jan 17 Javascript
vue封装数字翻牌器
Apr 20 Vue.js
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 #Javascript
Vue3不支持Filters过滤器的问题
Sep 24 #Javascript
jdk1.8+vue elementui实现多级菜单功能
Sep 24 #Javascript
vue实现日历表格(element-ui)
Sep 24 #Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 #Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 #Javascript
vue-router 控制路由权限的实现
Sep 24 #Javascript
You might like
PHP 采集获取指定网址的内容
2010/01/05 PHP
php实现图片添加水印功能
2014/02/13 PHP
ThinkPHP分页实例
2014/10/15 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
英语专业毕业生求职信
2014/05/24 职场文书
法律系毕业生求职信
2014/05/28 职场文书
安全标兵事迹材料
2014/08/17 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python