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

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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NodeJs实现自定义分享功能,获取微信授权+用户信息

最近公司搞了个运营活动&#xff0c;入口放在了微信公众号里&#xff0c;好久没碰过微信了&#xff0c;刚拾起来瞬间感觉有点懵逼。。。。似乎把之前的坑又都重新踩了一遍&#xff0c;虽然过程曲折&#xff0c;不过好在顺利完成了&#xff0c;而且印象也更加深刻了&#xff0c;…

git的简单理解及基础操作命令

前端小白一枚&#xff0c;最近开始使用git&#xff0c;于是花了2天看了廖雪峰的git教程(偏实践&#xff0c;对于学习git的基础操作很有帮助哦)&#xff0c;也在看《git版本控制管理》这本书(偏理论&#xff0c;内容完善&#xff0c;很不错)&#xff0c;针对所学内容建了git仓库…

iOS 后台挂起的一些坑

特别说明&#xff1a;后台状态&#xff1a;当前app如果不是作为屏幕中的第一层&#xff0c;呈现显示给用户&#xff0c;那么此时app就是后台状态。锁屏&#xff08;包括&#xff1a;当前应用下锁屏、其他应用下锁屏、桌面锁屏&#xff09; 用户在使用其他应用app2&#xff0c;…

OSGI 生命周期

1 生命周期管理 对于非模块化应用&#xff0c;生命周期将应用作为一个整体来操作&#xff1b;而对于模块化应用&#xff0c;则可以以细粒度的方式来管理应用的某一个独立部分。OSGi生命周期管理 OSGi生命周期层有两种不同的作用&#xff1a; 在应用程序外部&#xff0c;定义了对…

tomcat+nginx+redis实现均衡负载、session共享

在项目运营时&#xff0c;我们都会遇到一个问题&#xff0c;项目需要更新时&#xff0c;我们可能需先暂时关闭下服务器来更新。但这可能会出现一些状况:1.用户还在操作&#xff0c;被强迫终止了(我们可以看日志等没人操作的时候更新&#xff0c;但总可能会有万一)2.不知道的用户…

洛谷 P3184 [USACO16DEC]Counting Haybales数草垛

洛谷 P3184 [USACO16DEC]Counting Haybales数草垛 题目描述 Farmer John has just arranged his NN haybales (1 \leq N \leq 100,0001≤N≤100,000 ) at various points along the one-dimensional road running across his farm. To make sure they are spaced out appropria…

关于笔试的一些博客

这里收集了一些阿里的网上笔试题目 阿里笔试题(2015)持续更新中腾讯阿里实习生招聘笔试总结阿里2014研发实习生笔试题解析【阿里】算法工程师笔试题整理&#xff08;13&14年&#xff09;【阿里】算法工程师笔试【2015.04.02】转载于:https://www.cnblogs.com/chen310/p/438…

Entity Framework 6 Recipes 2nd Edition(13-2)译 - 用实体键获取一个单独的实体

问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Painting(绘画)类型的实体,如Figure 13-2所示: Figure 13-2. The Painting entity type in our model 在代码In Listi…

C#心得与经验(二)

本周学到很多C#关于Interface, Array的知识&#xff0c;在这里简单复习一下几个易混的地方&#xff0c;重在理解。 一、Interface 使用as来避免多态时没有接口的Exception&#xff1a; Document [] folder new Document[5]; for (int i 0; i < 5; i) {if (i % 2 0){fold…

java实例化对象

摘要&#xff1a;分享牛&#xff0c;分享牛分享&#xff0c;java类加载机制&#xff0c;java实例化对象&#xff0c;java实例化对象机制&#xff0c;java基础。 java是如何实例化对象的呢&#xff1f;以及实例化对象的先后顺序是什么&#xff1f;下面我们以测试的方式说明. 1.1…

项目总结(3.28)

项目是用vuewebpackelementUI 完成的。虽然没有什么深奥的技术和难点&#xff0c;但是有些细节还是值得注意的。 1、满足不同屏幕尺寸下缩放全屏显示。 单单只靠宽度、高度百分比是不可以实现的&#xff0c;比如如果宽度设置百分比&#xff0c;当屏幕宽度比较小时&#xff0c;这…

Android开发删除短信

本人一直有一个需求&#xff0c;想要手机自动拦截黑名单里联系人的信息并自动删除这些短信&#xff0c;手机管家之类的软件可以拦截但是没找到能删除这些短信的&#xff0c;于是就萌生了想自己写一个android软件的想法。 加上物联网的兴起&#xff0c;安卓设备开发肯定前景很好…

让你提升命令行效率的 Bash 快捷键 [完整版]

生活在 Bash shell 中&#xff0c;熟记以下快捷键&#xff0c;将极大的提高你的命令行操作效率。 编辑命令 Ctrl a &#xff1a;移到命令行首Ctrl e &#xff1a;移到命令行尾Ctrl f &#xff1a;按字符前移&#xff08;右向&#xff09;Ctrl b &#xff1a;按字符后移&…

Okhttp的封装和回调

public class HttpUtil {static HttpUtil util;private final OkHttpClient client;// 私有化构造方法private HttpUtil(){client new OkHttpClient();}public static HttpUtil getInstance(){if(util null){synchronized (HttpUtil.class){util new HttpUtil();}}return u…

将Session写入Memcache

通过session_set_save_handler()方法自定义Session写入Memcache 1 <?php 2 class MemSession{3 private static $handler null;4 private static $lifetime null;5 private static $time null;6 const MS session;7 8 …

微软解决方案全景

我遇到过一家企业的CTO&#xff0c;做过很多知名大企业的信息化规划设计&#xff0c;但他基本是一个Like Unix派系的技术&#xff0c;而我是一个Microsoft派系的技术&#xff0c;在这里我不是讨论哪个派系的技术好和不好&#xff0c;我只是在和他的聊天中发现了一些非常有意思的…

Going Dutch BAPC( 状态转移DP)

题目描述 You and your friends have just returned from a beautiful vacation in the mountains of the Netherlands. When on vacation, it’s annoying to split the bill on every expense every time, so you just kept all the receipts from the vacation, and wrote d…

查询指定目录下的文件中是否包含指定字符串

cd /etc/apache2/site-enable/rep -rl test.com ./*意为查询apache虚拟主机中是否包含test.com的域名转载于:https://blog.51cto.com/linuxtips/1773938

使用 C# 编程对RTF文档的支持

http://www.68design.net/Development/Aspnet/Basis-AspNet/26011-1.html 转载于:https://www.cnblogs.com/faxian/p/4402910.html

algorand共识协议_【Filecoin】理解预期共识 - 及它的优缺点

摘 要预期共识就是上帝掷飞镖预期共识的优点在于简单&#xff0c;而且每一次选举胜出者数量的平均数为1但预期共识不能保证每次选举的胜出者数量&#xff0c;这是其最大的问题期待有更好的基于可验证随机函数的共识算法出现&#xff0c;设计者可获得20万美金奖赏预期共识 就是 …