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. 组织:ITU

    国际电信联盟(International Telecommunication Union -- ITU)是联合国专门机构之一,主管信息通信技术事务,由无线电通信.标准化和发展三大核心部门组成,其成员包 ...

  2. 141. Linked List Cycle - LeetCode

    Question 141. Linked List Cycle Solution 题目大意:给一个链表,判断是否存在循环,最好不要使用额外空间 思路:定义一个假节点fakeNext,遍历这个链表,判断 ...

  3. Python技法:用argparse模块解析命令行选项

    1. 用argparse模块解析命令行选项 我们在上一篇博客<Linux:可执行程序的Shell传参格式规范>中介绍了Linux系统Shell命令行下可执行程序应该遵守的传参规范(包括了各 ...

  4. linux篇-centos7搭建apache服务器(亲测可用)

    1安装apache yum install httpd httpd-devel -y 2开启服务器 systemctl start httpd.service 3开机自启 systemctl enab ...

  5. Fail2ban 配置详解 基础配置(fail2ban.conf)

    [Definition] loglevel = INFO # 设置日志级别:级别越低显示日志的信息更详细. # CRITICAL - 关键级别 # ERROR - 错误级别 # WARNING - 警 ...

  6. git指令使用

    仓库为空,本地创建git项目之后提交到仓库中1.创建项目文件夹(本地git仓库)2.在项目文件夹中右键:选择Git Bash3.初始化项目:git init -- 会出现一个.git的隐藏文件夹4.将 ...

  7. BZOJ4713 迷失的字符串 解题报告

    BZOJ4713 题目大意:有 \(n\) 个点 \(n-1\) 条边,每条边有一个字符.给你 \(m\) 个字符串 \(s_i\),问每个字符串是否可以通过树上的一条简单路径表示. \(n,m\le ...

  8. 2006NOIP普及组:明明的随机数

    明明的随机数 时间限制:1000ms        内存限制:65536KB 题目描述: 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数 ...

  9. fpm工具安装

    概述 最近在对机房的编译环境做整理,过程曲折而痛苦,记录一下. 之前的一个老项目,在打包的时候用到了一个叫做fpm的工具. 编译环境涉及centos6和centos7,在新的编译环境的过程中,如何安装 ...

  10. 【clickhouse专栏】对标mongodb存储类JSON数据文档统计分析

    一.文档存储的需求 很多的开发者都使用过mongodb,在mongodb中数据记录是以文档的形式存在的(类似于一种多级嵌套SQL的形式).比如下面的JSON数据结构:dev_ip表示某一台服务器的ip ...