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对比的一些变化的更多相关文章

  1. 好久没发文了,一篇Vue3的Composition API使用奉上

    Composition API Composition API是Vue3中推荐的组件代码书写方式,相较于传统的Options API来说,它能让业务逻辑处理和后期代码维护变的更加简单. 首先我们来看O ...

  2. vue3.0 的 Composition API 的一种使用方法

    网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面, ...

  3. Vue3全家桶升级指南一composition API

    1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...

  4. Vue3 Composition API写烦了,试试新语法糖吧—setup script

    前言 Vue3发布近一年了,相信大家对Vue3的新特性,新语法都很熟悉了.那么在使用Composition API的过程中,有没有觉得整个过程比较繁琐.比如你的模板里用到了大量的state和方法的时候 ...

  5. Vue3.0常用代码片段和开发插件

    Vue3 Snippets for Visual Studio Code Vue3 Snippets源码 Vue3 Snippets下载 This extension adds Vue3 Code S ...

  6. Vue 3.0 中令人激动的新功能:Composition API

    正如你所期望的那样,Vue 3带来了很多令人兴奋的新功能.值得庆幸的是,Vue团队主要是在当前API的基础上引入了一些补充和改进,而不是进行重大更改,所以已经了解Vue 2的人应该很快就会对新的语法感 ...

  7. mixin和composition api

    1. 这两个都是实现组件逻辑复用的法宝 2. composition api是vue3的,  composition api的出现就是解决mixins的不足之处的 一. mixin 回顾下mixin, ...

  8. composition api和react hooks的对比

    一.  我的走位:   保持中立 1. 各有各的好处,  谁也别说谁 2. 一个东西带来的好处, 相应的副作用肯定也有, 人无完人 二 .  vue3 的composition api 和   rea ...

  9. UWP Composition API - 锁定列的FlexGrid

    需求是第一列锁定,那么怎么让锁定列不跟着滚动条向做移动呢? 其实很简单,让锁定列跟scrollviewer的滚动做反方向移动. 先看一下这个控件的模板,嗯,其实很简单,就是ListView的模板,不同 ...

随机推荐

  1. java_简单学习笔记

    java_study笔记 前言: 所有笔记均总结自狂神的java基础视频 https://www.bilibili.com/video/BV12J41137hu?p=1 idea小技巧 psvm+回车 ...

  2. Spring Security之短信登录

    实现短信验证码登录 前面实现了 用户名+密码 的登录方式,现在实现一下短信验证码登录. 开发短信验证码接口 短信验证码和图形验证码类似,用户从手机短信得到验证码和从图片得到验证码类似. 校验短信验证码 ...

  3. arts-week10

    Algorithm 905. Sort Array By Parity - LeetCode Review Who's Afraid of the Big Bad Preloader? 一文读懂前端缓 ...

  4. 数仓选型必列入考虑的OLAP列式数据库ClickHouse(上)

    概述 定义 ClickHouse官网地址 https://clickhouse.com/ 最新版本22.4.5.9 ClickHouse官网文档地址 https://clickhouse.com/do ...

  5. linux篇-linux LAMP yum版安装

    LAMP(linux.apache.mysql.php),是四个套件的合成,简单讲就是要把php运行在linux上,需要依赖apache和mysql数据库. 1 准备好一个linux系统(centos ...

  6. Fail2ban 安装Fail2ban到Ubuntu

    系统版本:Ubuntu 16.04.5 LTS 软件版本:fail2ban-0.9.3 硬件要求:无 1.安装Fail2ban root@local:~# apt-get update root@lo ...

  7. OpenWrt 20.02.2 小米路由器3G配置CP1025网络打印

    家里的施乐 CP116w 工作快五年了终于罢工了. 黑粉报错, 自己也不会拆, 只能搁置了. 后来换了个 HP CP1025. 这个打印机也不错, 墨盒便宜没什么废粉, 就是启动慢一点, 而且 -- ...

  8. A* K短路

    注:\(A*\) 求解K短路效率极其低下,时间复杂度\(O(nklog\ n)\),空间视题目而定,因为本质是爆搜,可求解数据范围较小的题目. 我们使用\(A*\)求解k短路: 首先需要预处理出估价函 ...

  9. 制造企业信息化时代,SaaS系统下沉,移动端上升

    这个时代,我们是不是有很多岗位一定是要在电脑前面完成?如果我们让部分岗位的办公室人员离开电脑,让他们通过移动端来完成工作,这又会产生出一个什么样的变化?是否意味着可以有更多的时间在一线生产制造现场,从 ...

  10. 1.3温度转换(中国大学Mooc-Python 语言程序设计)

    温度转换 温度刻画的两种不同体系 1.摄氏度:(中国等世界大多数国家使用) 以1标准大气压下水的结冰点为0度,沸点为100度,将温度进行等分刻画  2.华氏度:(美国.英国等国家使用) 以1标准大气压 ...