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 相关文章推荐
利用javascript中的call实现继承
Jan 22 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
Node.js抓取中文网页乱码问题和解决方法
Feb 10 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
Aug 06 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
Oct 14 Javascript
Vue指令的钩子函数使用方法
Mar 20 Javascript
jQuery动态追加页面数据以及事件委托详解
May 06 jQuery
vue.js中实现登录控制的方法示例
Apr 23 Javascript
vue 获取及修改store.js里的公共变量实例
Nov 06 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
Jan 07 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
python多线程用法实例详解
2015/01/15 Python
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
python自定义类并使用的方法
2015/05/07 Python
Python3处理文件中每个词的方法
2015/05/22 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Python批量启动多线程代码实例
2020/02/18 Python
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
EJB的几种类型
2012/08/15 面试题
人力资源行政经理自我评价
2013/10/23 职场文书
银行出纳岗位职责
2013/11/25 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
村干部承诺书
2014/03/28 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
预备党员介绍人意见
2015/06/01 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
Python进度条的使用
2021/05/17 Python