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 相关文章推荐
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
Sep 05 Javascript
简体中文转换繁体中文(实现代码)
Dec 25 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
让图片跳跃起来  javascript图片轮播特效
Feb 16 Javascript
JavaScript事件代理和委托详解
Apr 08 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
May 09 Javascript
node.js 和HTML5开发本地桌面应用程序
Dec 13 Javascript
一步步教你利用Canvas对图片进行处理
Sep 19 Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 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断点续传之如何分割合并文件
2014/03/22 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
Python随机读取文件实现实例
2017/05/25 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
Python之pymysql的使用小结
2019/07/01 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
python groupby 函数 as_index详解
2019/12/16 Python
python实现飞船大战
2020/04/24 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
用python发送微信消息
2020/12/21 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
函授本科毕业自我鉴定
2013/10/09 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
学历公证委托书
2014/04/09 职场文书
计生个人工作总结
2015/02/28 职场文书
运动会3000米加油稿
2015/07/21 职场文书
opencv检测动态物体的实现
2021/07/21 Python