Vue3 生命周期 && Hooks封装 && toRef
1 # 一、Vue3.0与Vue2.0生命周期改动
2 beforDestroy改名为beforeUnmount
3 destroyed改名为unmounted
4 # Vue3.0页提供了Composition API形式的生命周期钩子,与Vue2.x中猴子对应关系如下:
5 import {onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted} from 'vue'
6 beforeCreate ====> setup()
7 created ====> setup()
8 beforeMount ====> onBeforeMount
9 mounted ====> onMounted
10 beforeUpdate ====> onBeforeUpdate
11 updated ====> onUpdated
12 beforeUnmount ====> onBeforeUnmount
13 unmounted ====> onUnmounted
14 # 注意:
15 # 1.setup函数中如何编写生命周期钩子:setup(){onBeforeMount(()=>{console.log('onBeforeMount被调用了!');})}
16 # 2.你可以直接通过配置项去配置生命周期(也就是不通过setup中Composition API的形式编码生命周期回调,直接和Vue2.x中一样配置)
17 # 3.当你setup中编写了生命周期回调,同时配置项中也配置了生命周期函数的时候,Vue3.0是默认先调用Composition API的形式编码生命周期回调,然后在调用配置项中的生命周期回调。
18 # 二、自定义hook函数
19 # 1.什么是hook函数? —— 本质是一个函数,把setup函数中使用的Composition API进行了封装。
20 # 2.类似于Vue2.x中的mixin混入。
21 # 3.自定义hook的有事:复用代码,让setup中的逻辑更清楚易懂。
22 # 举个例子:
23 # /hooks/usePoint.js 把单独的功能或业务独立封装一个文件
24 import {reactive, onBeforeUnmount, onMounted} from 'vue'
25
26 export default function (){
27 let mPoint = reactive({
28 x: 0,
29 y: 0
30 })
31 function savePoint(event){
32 mPoint.x = event.pageX;
33 mPoint.y = event.pageY;
34 console.log('savePoint');
35 }
36 onMounted(()=>{
37 console.log('onMounted');
38 window.addEventListener('click', savePoint);
39
40 });
41 onBeforeUnmount(()=>{
42 console.log('onBeforeUnmount');
43 window.removeEventListener('click', savePoint);
44 });
45 return mPoint;
46 }
47 # Demo.vue
48 <template>
49 <h2>sum的值:{{sum}}</h2>
50 <button @click="sum+=1">点我+1</button>
51 <hr>
52 <div>鼠标点击的坐标是:({{mPoint.x}},{{mPoint.y}})</div>
53 </template>
54
55 <script>
56 import {ref} from 'vue'
57 import savePoint from '../hooks/usePoint.js' // 引入封装好的功能
58 export default {
59 name: 'HelloWorld',
60 setup(props, context){
61 let sum = ref(0);
62 let mPoint = savePoint(); // 然后安装功能
63 return {
64 sum,
65 mPoint // 暴露它,你就可以显示在页面上了
66 }
67 }
68 }
69 </script>
70 # 三、toRef函数
71 # 1.作用:创建一个ref对象,其value值指向另一个对象中的某个属性
72 # 2.语法:const name = toRef(pserson, 'name')
73 # 3.应用:要将响应式对象中的某个属性单独提供给外部使用时。
74 # 4.扩展:toRefs与toRef功能一直,但可以批量创建多个ref对象,语法:toRefs(person)
75 # 例子:
76 <template>
77 <h3>姓名:{{name}}</h3>
78 <h3>年龄{{age}}</h3>
79 <h3>薪资:{{job.j1.salary}}K</h3>
80 <button @click="name+='~'">修改姓名</button>
81 <button @click="age++">年龄增长</button>
82 <button @click="salary++">涨薪</button>
83 </template>
84
85 <script>
86 import {reactive, toRef, toRefs} from 'vue'
87 export default {
88 name: 'HelloWorld',
89 setup(props, context){
90 let person = reactive({
91 name: '张三',
92 age: 18,
93 job:{
94 j1:{
95 salary: 30
96 }
97 }
98 });
99
100 return {
101 salary: toRef(person.job.j1, 'salary'),
102 ...toRefs(person)
103 }
104 }
105 }
106 </script>
Vue3 生命周期 && Hooks封装 && toRef的更多相关文章
- vue2和vue3生命周期的区别
概念 首先,我们了解一下"生命周期"这个词.通俗的来说,生命周期就是一个事务从出生到消失的过程.例如,一个人从出生到去世.在vue中,vue的生命周期是指,从创建vue对象到销毁v ...
- MyBatis之八:需要说明的几个java api的生命周期以及封装
学习mybatis不得不了解SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.这里主要是讲解它们的生命周期以及一般最佳实践. 一般来说对象的生 ...
- vue3生命周期
介绍 vue3的生命周期函数,可以按需导入到组件中,且只能在 setup() 函数中使用 示例 import { onMounted, onUpdated } from '@vue/compositi ...
- Vue3生命周期的理解
beforeCreate():在实例生成之前 created():在实例生成之后 beforeMount():在模板已经被编译成函数之后,组件内容被渲染到页面之前 mounted():在组件内容被渲染 ...
- Struts2-整理笔记(四)Action生命周期、如何获取参数(3种)、集合类型参数封装
一.Action生命周期 每次请求到来时,都会创建一个新的Action实例 Action是线程安全的,可以使用成员变量接收参数 二.获取参数的方式(3种) 1.属性驱动获得参数 每次请求Action时 ...
- Vue环境搭建-项目的创建-启动生命周期-组件的封装及应用
vue项目环境的搭建 """ node >>> python:node是用c++编写用来运行js代码的 npm(cnpm) >>> p ...
- 3) drf 框架生命周期 请求模块 渲染模块 解析模块 自定义异常模块 响应模块(以及二次封装)
一.DRF框架 1.安装 pip3 install djangorestframework 2.drf框架规矩的封装风格 按功能封装,drf下按不同功能不同文件,使用不同功能导入不同文件 from r ...
- React文档(六)state和生命周期
想一下之前的章节时钟的例子. 目前为止我们只学习了一直方式去更新UI. 我们调用ReactDOM.render()方法去改变渲染的输出: function tick() { const element ...
- Django组件 - Django请求生命周期、中间件
一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...
随机推荐
- for循环+数字类型补充
一.for循环 1.循环取值 1.1列表类型: 定义l=['a','b','c'],要提取列表中的值 如果采用while循环的话: print(len(l)) i=0 while i& ...
- break、continue、return中选择一个,我们结束掉它
在平时的开发过程中,经常会用到循环,在写循环的过程中会有很多判断条件及逻辑,你知道如何结束一个循环吗?在java中有break.continue.reture三个关键字都可以结束循环,我们看下他们 ...
- 微信小程序避坑指南——input框里的图标在部分安卓机里无法点击的问题
问题场景: 下图中的显隐密码和验证码均为包裹在 input标签 中的 image标签, 但在开发测试中发现点击不了这俩个image标签,因为是被input标签的padding挡住了. 解决方法:将im ...
- [第18届 科大讯飞杯 J] 能到达吗
能到达吗 题目链接:牛客5278 J 能到达吗 Description 给定一个 \(n\times m\) 的地图,地图的左上角为 \((1, 1)\) ,右下角为 \((n,m)\). 地图上有 ...
- 渗透测试之常用的sql语句
学习路漫漫,常用的sql语句给我们平常所运用的sql语句相差不多,用句土话讲:百变不离其中 注:网络安全时刻警醒,需要打靶的还需要建立自己的靶场,关注博主在以往博客中分享有多种创建靶场可参考 1.判断 ...
- 2021.05.29【NOIP提高B组】模拟 总结
T1 题意:给你一个图,可以不花代价经过 \(K\) 条边,问从起点到终点的最短路 考试的想法:设 \(dis_{i,j}\) 表示从起点免费了 \(j\) 条边到 \(i\) 的最短路 然后直接跑 ...
- CAP 6.1 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 6.1 版本正式版,在这个版本中我们主要针对目前已经发现的几个BUG进行了修复了以及添加了一些小特性. 那么,接下来我们具体看一下吧. 总览 可能有些人还不知 ...
- 喜提JDK的BUG一枚!多线程的情况下请谨慎使用这个类的stream遍历。
你好呀,我是歪歪. 前段时间在 RocketMQ 的 ISSUE 里面冲浪的时候,看到一个 pr,虽说是在 RocketMQ 的地盘上发现的,但是这个玩意吧,其实和 RocketMQ 没有任何关系. ...
- 微信小程序使用 ECharts
echarts-for-weixin 是 ECharts 官方维护的一个开源项目,提供了一个微信小程序组件(Component),我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表. e ...
- python中 OS模块中 os.path.join() 函数用法简介
基础用法 os.path.join() 用于拼接文件的路径,可以传入多个待拼接的路径 若各个路径之间不存在 " / ", 则其会自动为各个路径之间增加连接符 " / &q ...