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的更多相关文章

  1. vue2和vue3生命周期的区别

    概念 首先,我们了解一下"生命周期"这个词.通俗的来说,生命周期就是一个事务从出生到消失的过程.例如,一个人从出生到去世.在vue中,vue的生命周期是指,从创建vue对象到销毁v ...

  2. MyBatis之八:需要说明的几个java api的生命周期以及封装

    学习mybatis不得不了解SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.这里主要是讲解它们的生命周期以及一般最佳实践. 一般来说对象的生 ...

  3. vue3生命周期

    介绍 vue3的生命周期函数,可以按需导入到组件中,且只能在 setup() 函数中使用 示例 import { onMounted, onUpdated } from '@vue/compositi ...

  4. Vue3生命周期的理解

    beforeCreate():在实例生成之前 created():在实例生成之后 beforeMount():在模板已经被编译成函数之后,组件内容被渲染到页面之前 mounted():在组件内容被渲染 ...

  5. Struts2-整理笔记(四)Action生命周期、如何获取参数(3种)、集合类型参数封装

    一.Action生命周期 每次请求到来时,都会创建一个新的Action实例 Action是线程安全的,可以使用成员变量接收参数 二.获取参数的方式(3种) 1.属性驱动获得参数 每次请求Action时 ...

  6. Vue环境搭建-项目的创建-启动生命周期-组件的封装及应用

    vue项目环境的搭建 """ node >>> python:node是用c++编写用来运行js代码的 npm(cnpm) >>> p ...

  7. 3) drf 框架生命周期 请求模块 渲染模块 解析模块 自定义异常模块 响应模块(以及二次封装)

    一.DRF框架 1.安装 pip3 install djangorestframework 2.drf框架规矩的封装风格 按功能封装,drf下按不同功能不同文件,使用不同功能导入不同文件 from r ...

  8. React文档(六)state和生命周期

    想一下之前的章节时钟的例子. 目前为止我们只学习了一直方式去更新UI. 我们调用ReactDOM.render()方法去改变渲染的输出: function tick() { const element ...

  9. Django组件 - Django请求生命周期、中间件

    一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...

随机推荐

  1. zabbix 添加监控交换机温度item

    首先需要获取到交换机温度对应的OID,可以官方文档进行查询(多为私有OID),以盛科为例 官方文档查询到温度节点对于的OID为 10.0.3.102 1.3.6.1.4.1.27975.37.1.3. ...

  2. 请求扩展、蓝图、g对象

    今日内容概要 请求扩展 蓝图 g对象 内容详细 1.请求扩展 # 在请求来了,请求走了,可以做一些校验和拦截,通过装饰器来实现 7 个 # 1 before_request 类比django中间件中的 ...

  3. 150. Evaluate Reverse Polish Notation - LeetCode

    Question 150. Evaluate Reverse Polish Notation Solution 2 1 + 3 * 是((2+1)*3)的后缀(postfix)或逆波兰(reverse ...

  4. SQL表的创建

    ​  一,创建表 1.使用鼠标创建表 1,进入SQL进行连接 ​编辑 2,在左边会有一个对象资源管理器,右键数据库,在弹出的窗口中选择新建数据库 ​编辑 3,给这个包取个名字,在这个界面可以给这个表选 ...

  5. 广义SAM

    参考 还有首先你要会SAM吧~ 用途 相比与单串SAM,广义自动机能存储的是多个字符串. 有两种写法,第一种是离线利用trie树结构,第二种是在线伪广义SAM 离线+Trie 首先构建出trie树. ...

  6. 关于『HTML5』:第二弹

    关于『HTML5』:第二弹 建议缩放90%食用 咕咕咕咕咕咕咕!!1 (蒟蒻大鸽子终于更新啦) 自开学以来,经过了「一脸蒙圈的 半期考试」.「二脸蒙圈的 体测」的双重洗礼,我终于有空肝 HTML5 辣 ...

  7. 关于mybatis的应用

    导入依赖 <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifact ...

  8. ES6 - promise(3)

    上一篇熟悉了promise的具体过程: promise的过程: 启动异步任务 => 返回promise对象 =>给promise对象绑定回调函数(甚至可以在异步任务结束后指定多个). 从p ...

  9. Redis - Redlock算法

    Redis - Redlock算法 在Redis的分布式环境中,我们假设有N个Redis master.这些节点完全互相独立,不存在主从复制或者其他集群协调机制.之前我们已经描述了在Redis单实例下 ...

  10. 一文带你了解J.U.C的FutureTask、Fork/Join框架和BlockingQueue

    摘要: J.U.C是Java并发编程中非常重要的工具包,今天,我们就来着重讲讲J.U.C里面的FutureTask.Fork/Join框架和BlockingQueue. 本文分享自华为云社区<[ ...