Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化
1 # 一、Vue3不常用的Composition API
2 # 1.shallowReactive与shallowRef
3 .shallowReactive: 只处理对象最外层属性的响应式(浅响应式)
4 .shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理。
5 什么时候用:
6 如果一个对象数据,结构比较深,但变化只是外层属性变化 ===> shallowReactive。
7 如果一个对象数据,后续功能不会修改该对象中的属性,而是生成新的对象来替换 ===> shallowRef。
8 # 2.readonly 与 shallowReadonly
9 readonly: 让一个响应式数据变为只读的(深只读)
10 shallowReadonly: 让一个响应式数据变为只读的(浅只读)
11 应用场景:不希望数据被修改时
12 # 3.toRaw与markRaw
13 toRaw:
14 作用:可以将一个有reactive生成的响应式对象转为普通对象。
15 使用场景:用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引起页面的更新
16 注意!!!:当你对转换后的普通对象进行修改的时候,界面不会更新,但响应式对象的值却会改变。
17 markRaw:
18 作用:可以标记一个对象为不可响应式对象,使其永远不会再成为响应式对象。
19 使用场景:1.有些值不应该被设置为响应式的,例如复杂的第三方类库等。2.当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能
20 # 4.customRef
21 # 作用:创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显示控制
22 # 例子:
23 <template>
24 <input type="text" v-model="inputText" />
25 <h3>{{inputText}}</h3>
26 </template>
27
28 <script>
29 import {ref, customRef} from 'vue'
30 export default {
31 name: 'HelloWorld',
32 setup(){
33 function myRef(value, delay){
34 let timer;
35 return customRef((track,trigger)=>{
36 return {
37 get(){
38 console.log(`有人从myRef这个容器中读取了数据,我把${value}给它了!`);
39 track();// 通知Vue追踪value的变化(提前和get商量一下,让它认为这个value是有用的)
40 return value;
41 },
42 set(newValue){
43 console.log(`有人吧myRef这个容器中数据改为了:${newValue}`);
44 clearTimeout(timer);
45 timer = setTimeout(()=>{
46 value = newValue;
47 trigger(); // 通知Vue去重新解析模板
48 },delay);
49 }
50 }
51 });
52 }
53 let inputText = myRef('hello', 500);
54 return {
55 inputText
56 }
57 }
58 }
59 </script>
60 # 5.provide 与 inject
61 # .作用:实现祖与后代组件间通信
62 # .套路:父组件有一个provide选项来提供数据,后台组件有一个inject选项来开始使用这些数据
63 # .具体用法:
64 # 祖组件中:
65 setup(){
66 ...
67 let car = reactive({name:'奔驰',price:'40W'});
68 provide('car', car);
69 ...
70 }
71 # 后代组件中:
72 setup(){
73 ...
74 const car = inject('car');
75 return{car}
76 }
77 # 6.defineAsyncComponent 异步组件
78 # 作用:非异步组件,vue只有将所有组件都准备好了之后同一显示,如果组件加载耗时较长的话,就会导致页面空白一段事件
79 # 语法:
80 import {defineAsyncComponent} from 'vue';
81 const Child = defineAsyncComponent(()=>import('./components/Child.vue'));
82 # 6.响应式数据的判断(只有一个参数:要检查的对象。返回bool值)
83 isRef: 检查一个值是否为一个ref对象
84 isReactive: 检查一个对象是否是由reactive创建的响应式代理
85 isReadonly: 检查一个对象是否有readonly创建的只读代理
86 isProxy: 检查一个对象是否有reactive或者readonly方法创建的代理
87
88 # 二、新的组件
89 # 1.Fragment
90 # .在Vue2中:组件必须有一个根标签
91 # .在Vue3中:组件可以没有根标签,内部会将多个标签包含在一个Fragement虚拟元素中
92 # .好处:减少标签层级,减少内存占用
93 # 2.Teleport
94 # .什么是Teleport:一种能够将我们的组件html结构移动到指定位置的技术
95 <template to="如:body、#divid">
96 <div v-if="isShow" class="mask">
97 <div class="dialog" class="dialog">
98 <h3>我是一个弹窗</h3>
99 <button @click="isShow=false">关闭弹窗</button>
100 </div>
101 </div>
102 </template>
103 <style>
104 .mask{
105 position: absolute;
106 top:0,bottom:0,left:0,right:0;
107 background-color: rgba(0,0,0,0.5);
108 }
109 .dialog{
110 position: absolute;
111 top: 50%;
112 left: 50%;
113 transform: translate(-50%, -50%);
114 text-align: center;
115 width: 300px;
116 height: 300px;
117 background-color: green;
118 }
119 </style>
120 # 3.Suspense
121 # .作用:等待异步组件一些额外内容,让应用有更好的用户体验
122 # .例子:
123 # 异步引入组件
124 import {defineAsyncComponent} from 'vue';
125 const Child = defineAsyncComponent(()=>import('./components/Child.vue'));
126 # 使用Suspense包裹组件,并配置好default与fallback
127 <template>
128 <div class="app">
129 <Suspense>
130 <template v-solt:defalt>
131 <Child />
132 </template>
133 <template v-solt:fallback>
134 <h3>加载中...</h3>
135 </template>
136 </Suspense>
137 </div>
138 </template>
139 # 三、Vue2与Vue3的一些变化调整
140 # 1.Vue3.0中将全局API,即:Vue.xxx调整到应用实例(app)上
141 Vue.config.xxx app.config.xxx
142 Vue.config.priductionTip Vue3中移除了
143 Vue.component app.compoent
144 Vue.directive app.directive
145 Vue.mixin app.mixin
146 Vue.use app.use
147 Vue.prototype app.config.globalProperties
148 # 2.data选项应始终声明为一个函数
149 # 3.过渡类名的更改:
150 # Vue2中的语法
151 .v-enter,
152 .v-leave-to{opacity:0;}
153 .v-leave,
154 .v-enter-to{opacity:1;}
155 # Vue3中的语法
156 .v-enter-from,
157 .v-leave-to{opacity:0;}
158 .v-leave-from,
159 .v-enter-to{opacity:1;}
160 # 4.移除keyCode作为v-on的修饰符,同时也不再支持config.keyCodes
161 # 5.移除v-on.native修饰符
162 # 父组件中绑定事件
163 <my-component v-on:close="handeleComponentEvent1" v-on:click="handeleComponentEvent2"/>
164 # 子组件中声明定义
165 export default{
166 emits: ['close'] // 这里没有接收的事件都是原生事件
167 }
168 # 6.移除了过滤器(filter)
169 过滤器虽然看起来很方便,但它需要一个自定义语法,打破大括号内表达式"只是JavaScript"的假设,这不仅有学习成本,而且有实现成本!建议用方法或计算属性去替换过滤器。
170
Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化的更多相关文章
- 好久没发文了,一篇Vue3的Composition API使用奉上
Composition API Composition API是Vue3中推荐的组件代码书写方式,相较于传统的Options API来说,它能让业务逻辑处理和后期代码维护变的更加简单. 首先我们来看O ...
- vue3.0 的 Composition API 的一种使用方法
网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面, ...
- Vue3全家桶升级指南一composition API
1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...
- Vue3 Composition API写烦了,试试新语法糖吧—setup script
前言 Vue3发布近一年了,相信大家对Vue3的新特性,新语法都很熟悉了.那么在使用Composition API的过程中,有没有觉得整个过程比较繁琐.比如你的模板里用到了大量的state和方法的时候 ...
- Vue3.0常用代码片段和开发插件
Vue3 Snippets for Visual Studio Code Vue3 Snippets源码 Vue3 Snippets下载 This extension adds Vue3 Code S ...
- Vue 3.0 中令人激动的新功能:Composition API
正如你所期望的那样,Vue 3带来了很多令人兴奋的新功能.值得庆幸的是,Vue团队主要是在当前API的基础上引入了一些补充和改进,而不是进行重大更改,所以已经了解Vue 2的人应该很快就会对新的语法感 ...
- mixin和composition api
1. 这两个都是实现组件逻辑复用的法宝 2. composition api是vue3的, composition api的出现就是解决mixins的不足之处的 一. mixin 回顾下mixin, ...
- composition api和react hooks的对比
一. 我的走位: 保持中立 1. 各有各的好处, 谁也别说谁 2. 一个东西带来的好处, 相应的副作用肯定也有, 人无完人 二 . vue3 的composition api 和 rea ...
- UWP Composition API - 锁定列的FlexGrid
需求是第一列锁定,那么怎么让锁定列不跟着滚动条向做移动呢? 其实很简单,让锁定列跟scrollviewer的滚动做反方向移动. 先看一下这个控件的模板,嗯,其实很简单,就是ListView的模板,不同 ...
随机推荐
- 【深入理解计算机系统CSAPP】第六章 存储器层次结构
6 存储器层次结构 存储器系统(memory system)是一个具有不同容量.成本和访问时间的存储设备的层次结构.CPU 寄存器保存着最常用的数据.靠近 CPU 的小的.快速的高速缓存存储器(cac ...
- ESP32+阿里云+vscode_Pio
用ESP32在vscode使用PlatformPIO写的代码.(代码是折叠代码,不能一眼瞧见,我也不太会使用编辑器哈,刚写博不久,望谅解.) 功能:esp32联网,能够通过联网打开在阿里云平台控制设备 ...
- 好客租房44-react组件基础综合案例-5发表评论-1
发表评论 1给按钮绑定点击事件 2在事件处理程序中 通过state获取评论信息 3将评论信息添加到state中 并调用setState()方法更新数据 //导入react import React f ...
- 项目下载依赖后面加 -S -D -g 分别代表什么意思
npm install name -S此依赖是在package的dependencies中,不仅在开发中,也在打包上线后的生产环境中,比如vue npm install name -D此依赖是在pac ...
- python函数学习的总结
python函数 part1 函数的作用: 函数以功能(完成一件事)为导向 随调随用减少代码重复性 增强代码可读性 函数的结构: def 函数名(): 函数体 函数的返回值 return:在函数中遇到 ...
- 走进Linux的世界
开源软件Linux的起源: Linux--操作系统. Linux,1991年Linux之父林纳斯 本纳第克特 托瓦兹,创建了Linux操作系统内核(开源). Linux的发行版和RHCE 1.Linu ...
- CF1485E Move and Swap
题意:Move and Swap 很好的题呢 n个节点的树,根为1,所有叶子的深度都是D,一开始根节点上有两个颜色分别微R,B的球,你执行下列操作D-1次: 1.R点跳到子树内 2.B点跳到下一层的任 ...
- 12.MYSQL基础-常见函数
4. 常见函数 一.字符函数 概念 类似于Java的方法,将一组逻辑语句封装在方法中,对外暴露方法名 优点 隐藏了实现细节 提高代码的重用性 调用 select 函数名(实参列表) [ from 表] ...
- php原生PHPExcel插件导表(附表格合并,加粗居中及加边框换行操作)
PHPExcel是用来操作Office Excel文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言.可以使用它来读取.写入不同格式的电子表格,如 Excel(BIFF) .xls, E ...
- ExtJS 布局-Column布局(Column layout)
更新记录: 2022年6月1日 开始. 2022年6月4日 发布. 1.说明 使用列布局,可以将容器拆分为特定大小的列,并将子组件放置在这些列中. 可以设置子组件宽度值为: 百分比(相对父容器宽度) ...