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的Pager分页器实现代码
Jul 17 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
一个简单的JS鼠标悬停特效具体方法
Jun 17 Javascript
jQuery中change事件用法实例
Dec 26 Javascript
使用iojs的jsdom库实现同步系统时间
Apr 20 Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
Mar 30 Javascript
javascript DOM的详解及实例代码
Mar 06 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
10分钟上手vue-cli 3.0 入门介绍
Apr 04 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 Javascript
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 输出缓存详解
2009/06/20 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP curl使用实例
2015/07/02 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
js下弹出窗口的变通
2007/04/18 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python可迭代对象操作示例
2019/05/07 Python
OpenCV 边缘检测
2019/07/10 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
Python extract及contains方法代码实例
2020/09/11 Python
电大自我鉴定范文
2013/10/01 职场文书
酒吧创业计划书
2014/01/18 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
消防安全主题班会
2015/08/12 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL