13 组合式API(四)

摘要:每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。在本文中,我们会仔细谈论生命周期钩子在组合式API中是如何使用的。

声明:为了文章的清爽性,在文章内部的代码演示中只会附上部分演示代码。

作者:来自ArimaMisaki创作

文章目录

  • 13 组合式API(四)
    • 13.1 注册周期钩子
    • 13.2 生命周期流程图
    • 13.3 自定义hook
    • 13.4 toRef

13.1 注册周期钩子

说明:在组合式写法中,我们并不是直接声明onMounted这样的生命周期钩子,而是需要从vue中解构中onMounted(),该函数中传入一个匿名函数

<script lang="ts" setup>
import { reactive, computed,onMounted } from 'vue'onMounted(()=>{console.log(`the component is now mounted.`);
})
</script><template><div></div>
</template>

13.2 生命周期流程图

13.3 自定义hook

说明:hook本质上是一个函数,其把setup函数中使用的CompositionAPI进行了封装,达到一个复用代码,使结构清晰的效果;自定义hook的作用类似于vue2中的mixin技术。

import {reactive,onMounted,onBeforeMount} from 'vue'
export default function() {let point = reactive({x:0,y:0})function savePoint(event:any) {point.x = event.pageXpoint.y = event.pageYconsole.log(event.pageX,event.pageY);}onMounted(()=>{window.addEventListener('click',savePoint)})onBeforeMount(() => {window.removeEventListener('click',savePoint)})return point
}
<script lang="ts">
import { defineComponent } from 'vue'
import usePoint from '../hooks/usePoints.js'
export default defineComponent({setup() {const point = usePoint();return {point}   }
})
</script><template><div><h2>测试组件</h2><h2>当前点击时鼠标的坐标为:x{{point.x}},y{{point.y}}</h2></div>
</template>

13.4 toRef

引入:一个由reactive创建的对象的确是响应式的,但是如果我们在setup函数中并非返回的是响应式对象,而是响应式对象的属性时,此时若在模板中使用该属性,该属性会丢失响应式。

说明:toRef用于将一个普通数据转为一个ref对象,ref对象仍和原数据是同一份数据;toRefs用于将一个普通对象数据中的属性全部转为ref对象,这些ref对象和原数据仍是同一份数据。

提示:有人或许会疑问直接使用ref貌似也能做到相同的效果,但实际的情况是,ref函数会生成一个新的ref对象,该对象和原数据无关系。

<script lang="ts">
import { defineComponent, reactive,toRef } from 'vue'
import usePoint from '../hooks/usePoints.js'
export default defineComponent({name:'MyHome',setup() {let person = reactive({name:'自来也',age:18,job:{j1:{salary:20}}})// 1.如果直接取出对象中的属性,则丢失响应式// 本质上相当于person.name的值给了name1,修改name1当然不会对person.name造成影响const name1 = person.name console.log(name1);// 2.通过toRef取得的数据仍为响应式对象中的属性// 也就是说,即使修改了name2,person中的name也会发生改变const name2 = toRef(person,'name')console.log(name2);return {name:toRef(person,'name'),age:toRef(person,'age'),salary:toRef(person.job.j1,'salary')}}
})
</script><template><div><h2>{{name}}</h2><h2>{{age}}</h2><h2>{{salary}}</h2></div>
</template>

一幅长文细学Vue(十三)——组合式中的生命周期相关推荐

  1. 一幅长文细学Vue(十)——初探组合式

    10 组合式API(一) 摘要:在进行前面的学习后,我们为了方便和Ts搭配使用Vue,需要放弃原有的选项式API写法,转向更为复杂的组合式API的学习:当然,这个学习过程无需担心学习成本过大,因为当你 ...

  2. 一幅长文细学Vue(一)——Webpack打包工具

    1 项目开发工具 摘要 ​ 在本文中,我们会详细讨论webpack是如何打包发布项目,不过对于Vue来说,Vite可以做到和webpack一样的功能. 声明:如果想要看懂此文章,需具备node.js中 ...

  3. 一幅长文细学HTML5

    HTML5 摘要 ​ 在本文的学习中,我们会讲述HTML5新增的特性.HTML5并不是一种新的语言,而是HTML语言的第五次重大修改版本.现如今很多主流浏览器都支持H5如chrome.firefox. ...

  4. 一幅长文细学React(一)——入门

    1 入门 摘要:React是前端两大热门框架之一,为此,学好React对于前端开发工程师来说是必不可少的.在本文中,我们会快速入门React. 声明:为了文章的清爽性,在文章内部的代码演示中只会附上部 ...

  5. 一幅长文细学CSS3

    摘要:CSS实际上指的是层叠样式表(Cascading style sheets),其作用是给页面中的HTML标签设置样式.在本文中我们会详细记录CSS3是如何给HTML美化样式的. 声明:在使用本文 ...

  6. 一幅长文细学JavaScript(五)——ES6-ES11新特性

    5 ES版本 摘要 ES5的先天不足致使ES后续版本的发展,这也是前端人员绕不开的一个点.如果我们想要在工作和面试中轻松解决问题,那么了解ES6-ES11是必不可少的. 在本文中,我将采用一种更加通俗 ...

  7. 一幅长文细学GaussDB(一)——数据库介绍

    文章目录 1 数据库介绍 1.1 数据库技术 1.2 数据库技术发展史 数据库技术产生和发展 数据库三个阶段比较 数据库系统优势 层次模型 网状模型 关系模型 关系数据库产品历史 结构化查询语言SQL ...

  8. 一幅长文细学GaussDB(二)——数据库基础知识

    文章目录 2 数据库基础知识 2.1 数据库管理简介 数据库管理 数据库管理工作范围 对象管理 制定数据库对象命名规范 备份和恢复 灾难恢复 备份方式 数据库安装 数据库卸载 数据库迁移 数据库扩容 ...

  9. 一幅长文细学华为MRS大数据开发(四)——HBase

    4 HBase 摘要:HBase是一种非关系型数据库,它是基于谷歌BigTable的开源实现,和BigTable一样,支持大规模海量数据的存储,对于分布式并发数据处理的效率极高,易于扩展且支持动态伸缩 ...

最新文章

  1. 跨平台PHP调试器设计及使用方法——高阶封装
  2. 前缀和(字串查询 Astar 2018 10002)
  3. 边缘提取算子检测比较
  4. 【做题记录】 [HEOI2013]SAO
  5. vuex构建vue项目_如何使用Vue.js,Vuex,Vuetify和Firebase构建单页应用程序
  6. python中基本运算符_Python中的基本运算符及示例
  7. 零基础学python电子书-零基础学Python
  8. gpgga格式读取MATLAB,GPS协议GGA、GLL、GSA、GSV、RMC、VTG解释
  9. RAID磁盘阵列总结
  10. 用cisco服务器添加html,在接入服务器上配置基本 AAA
  11. Vue二次元个人博客模板
  12. 不窃取用户隐私的搜索引擎: DuckDuckGo
  13. 昇腾AI室外移动机器人原理与应用(二 初识室外移动机器人)
  14. python图灵机器人微信号_IT之家学院:让你的微信号变成自动聊天机器人
  15. 大家都买用阿里云服务器干什么用?
  16. 一个男人的品味在于选择妻子
  17. 仪表和中控车机GUI界面开发工具介绍
  18. OpenLayers 加载天地图模糊的问题 OpenLayers 地图缩放模糊
  19. 参考 | 给C盘 “搬家“
  20. 人事管理系统项目(一)

热门文章

  1. linux拷贝目录并修改名字,linux复制文件夹、重命名文件夹、删除文件夹
  2. HITSZ智能证券投资报告(3-18)
  3. mysql数据库存储过程详解
  4. JS教程之 ElectronJS 自定义标题栏
  5. NUC980开源项目39-Rtl8188eus WIFI联网
  6. TensorFlow Lite 指导
  7. Domino Web应用早就想到了环保
  8. 用户拖欠电费,电力公司是怎样远程断电的?
  9. Zemax中Spot Diagram和MTF
  10. CALayer之旅(CALayer Tutorial: Getting Started)