Vue3 第五节 一些组合式API和其他改变

1.provide和inject

2.响应式数据判断

3.Composition API的优势

4.新的组件

5.其他改变

一.provide和inject

作用:实现祖与后代组件间通信

套路:父组件有一个provide选项来提供数据,后代组件有一个inject选项来开始使用这些数据

(1)在祖组件中 

(2)后代组件中

 (3)代码汇总

① App.vue

<template><div class="app"><h3>我是App(祖) {{ name }}--{{ price }}</h3><Child /></div>
</template><script>
import { reactive, provide, toRefs } from 'vue'
import Child from './components/Child.vue'
export default {name: 'App',components: { Child },setup () {let car = reactive({name: '奔驰',price: 40})// 给自己的后代组件提供数据provide('car', car)return {...toRefs(car)}}
}
</script><style>
.app {background: gray;padding: 10px;
}
</style>

 ② Child.vue

<template><div class="child"><h3>我是Child组件(子)</h3><Son></Son></div>
</template><script>
import Son from './Son.vue'
export default {name: 'Child',components: {Son}
}
</script>
<style>
.child {background: lightblue;padding: 10px;
}
</style>

③ Son.vue

<template><div class="son"><h3>我是Son组件(孙) {{ car.name }}--{{ car.price }}</h3></div>
</template><script>
import { inject } from 'vue'
export default {name: 'Son',setup () {let car = inject('car')return {car}}
}
</script><style>
.son {background: orange;padding: 10px;
}
</style>

二.响应式数据判断

  • isRef:检查一个值是否为一个ref对象
  • isReactive:检查一个对象是否由reactive创建的响应式代理
  • isReadonly:检查一个对象是否是由readonly创建的只读代理
  • isProxy:检查一个对象是否是由reactive或者readonly方法创建的代理

三.Composition API的优势

① 传统optionAPI中,新增或者修改一个需求,就需要分别在data, methods,computed里修改

不集中

② 组合式API更加优雅的组织我们的代码,函数,让相关功能的代码更加有序的组织在一起

四.新的组件

(1)Fragment

  • 在Vue2中,组件必须有一个根标签
  • 在Vue3中,组件可以没有根标签,内部会将多个标签包含在一个Fragment虚拟元素中
  • 好处:减少标签层级,减小内存占用

(2)Teleport

  • 是一种能够将我们的组件html结构移动到指定位置的技术
  • 使用

 代码:

Child.vue

<template><div class="child"><h3>我是Child组件</h3><Son></Son></div>
</template><script>
import Son from './Son.vue'
export default {name: 'Child',components: {Son}
}
</script>
<style>
.child {background: lightblue;padding: 10px;
}
</style>

Dialog.vue

<template><div><button @click="isShow = true">点我弹个窗</button><teleport to="body"><div v-if="isShow" class="dialog"><div class="mask"><h3>我是一个弹窗</h3><h4>一些内容</h4><h4>一些内容</h4><h4>一些内容</h4><button @click="isShow = false">关闭弹窗</button></div></div></teleport></div>
</template><script>
import { ref } from 'vue'
export default {name: 'Dialog',setup () {let isShow = ref(false)return { isShow }}
}
</script><style>
.dialog {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);text-align: center;width: 300px;height: 300px;background-color: green;
}
.mask {position: absolute;top: 0;bottom: 0;left: 0;right: 0;background-color: rgba(0, 0, 0, 0.5);
}
</style>

Son.vue

<template><div class="son"><h3>我是Son组件</h3><Dialog /></div>
</template><script>
import { inject } from 'vue'
import Dialog from './Dialog.vue'
export default {name: 'Son',components: { Dialog }
}
</script><style>
.son {background: orange;padding: 10px;
}
</style>

App.vue

<template><div class="app"><h3>我是App</h3><Child /></div>
</template><script>
import Child from './components/Child.vue'
export default {components: { Child },name: 'App'
}
</script><style>
.app {background: gray;padding: 10px;
}
</style>

(3)Suspense 

  • 等待异步组件时渲染一些额外内容,让应用有更好的用户体验
  • Suspense中提供两个插槽,第一个default插槽中放加载的组件,第二个fallback中放额外渲染的内容,如果网速比较慢,组件加载不出来的时候,会展示额外渲染的内容

 五.其他改变

① 全局API的转移

  • Vue2.x有很多全局API和配置,Vue3.0对这些API做出了调整,将全局的API,即:Vue.xxx调整到应用实例(app)上
2.x 全局 API(Vue3.x 实例 API (app)
Vue.config.xxxxapp.config.xxxx
Vue.config.productionTip移除
Vue.componentapp.component
Vue.directiveapp.directive
Vue.mixinapp.mixin
Vue.useapp.use
Vue.prototypeapp.config.globalProperties

② 其他改变

  • data选项影适中被声明为一个函数
  • 过渡类名的更改
- - Vue2.x写法```css.v-enter,.v-leave-to {opacity: 0;}.v-leave,.v-enter-to {opacity: 1;}```- Vue3.x写法```css.v-enter-from,.v-leave-to {opacity: 0;}.v-leave-from,.v-enter-to {opacity: 1;}```- 
  • 移除keyCode作为 v-on 的修饰符,同时也不再支持config.keyCodes

  • 移除v-on.native修饰符

- - 父组件中绑定事件```vue<my-componentv-on:close="handleComponentEvent"v-on:click="handleNativeClickEvent"/>```- 子组件中声明自定义事件```vue<script>export default {emits: ['close']}</script>```- 
  • 移除过滤器(filter)

 过滤器虽然这看起来很方便,但它需要一个自定义语法,打破大括号内表达式是 “只是         JavaScript” 的假设,这不仅有学习成本,而且有实现成本!建议用方法调用或计算属性去替换过滤器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/61310.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承

【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承 依赖范围 依赖传递 依赖排除 依赖原则 依赖继承 依赖范围 在Maven中&#xff0c;依赖范围&#xff08;Dependency Scope&#xff09;用于控制依赖项在编译、测试和运行时的可见性和可用性。通过指定适当的依赖…

uniapp-原生地图截屏返回base64-进行画板编辑功能

一、场景 vue写uniapp打包安卓包&#xff0c;实现原生地图截屏&#xff08;andirod同事做的&#xff09;-画板编辑功能 实现效果&#xff1a; 二、逻辑步骤简略 1. 由 原生地图nvue部分&#xff0c;回调返回 地图截屏生成的base64 数据&#xff0c; 2. 通过 uni插件市场 im…

【pinia】Pinia入门和基本使用:

文章目录 一、 什么是pinia二、 创建空Vue项目并安装Pinia1. 创建空Vue项目2. 安装Pinia并注册 三、 实现counter四、 实现getters五、 异步action六、 storeToRefs保持响应式解构七、基本使用&#xff1a;【1】main.js【2】store》index.js【3】member.ts 一、 什么是pinia P…

flink如何监听kafka主题配置变更

背景&#xff1a; 从前一篇文章我们知道flink消费kafka主题时是采用的手动assign指定分区的方式&#xff0c;这种消费方式是不处理主题的rebalance操作的&#xff0c;也就是消费者组中即使有消费者退出或者进入也是不会触发消费者所消费的分区的&#xff0c;那么疑问就来了&am…

PHP实现在线进制转换器,10进制,2、4、8、16、32进制转换

1.接口文档 2.laravel实现代码 /*** 进制转换计算器* return \Illuminate\Http\JsonResponse*/public function binaryConvertCal(){$ten $this->request(ten);$two $this->request(two);$four $this->request(four);$eight $this->request(eight);$sixteen …

Redis的AOF持久化

除了RDB持久化功能之外&#xff0c;Redis还提供了AOF持久化功能。与RDB 持久化通过保存数据库中的键值对来记录数据库状态不同&#xff0c;AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的&#xff0c;如下图所示。 举个例子&#xff0c;如果我们对空白的数据…

什么是DNS欺骗及如何进行DNS欺骗

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是 DNS 欺骗&#xff1f;二、开始1.配置2.Ettercap启动3.操作 总结 前言 我已经离开了一段时间&#xff0c;我现在回来了&#xff0c;我终于在做一个教…

Centos8上加速git clone

首先通过命令获取域名对应的IP地址 [rootggbond ~]# nslookup github.global.ssl.fastly.net [rootggbond ~]# nslookup github.com 之后如上获取到的IP地址 以IP-域名的格式加入到hosts文件中 [rootggbond ~]# vim /etc/hosts Centos8上更新DNS缓存 [rootggbond ~]# nscd -…

Java课题笔记~ HTTP协议(请求和响应)

Servlet最主要的作用就是处理客户端请求&#xff0c;并向客户端做出响应。为此&#xff0c;针对Servlet的每次请求&#xff0c;Web服务器在调用service()方法之前&#xff0c;都会创建两个对象 分别是HttpServletRequest和HttpServletResponse。 其中HttpServletRequest用于封…

腾讯云香港服务器租用价格_CN2线路延迟速度测试

腾讯云香港服务器&#xff0c;目前中国香港地域轻量应用服务器可选配置2核2G20M、2核2G30M、2核4G30M&#xff0c;操作系统可选Windows和Linux&#xff0c;不只是香港云服务器&#xff0c;新加坡、硅谷、法兰克福和东京服务器均有活动&#xff0c;腾讯云服务器网分享腾讯云境外…

Node.js学习笔记-03

七、网络编程 1. 构建 TCP 服务 TCP 是面向连接的协议&#xff0c;显著特征 在传输之前需要3次握手形成会话。 客户端 ——请求连接——> 服务器端 ——响应——> 客户端 ——开始传输——> 服务器端。 2. 构建 UDP 服务 3. 构建 HTTP 服务 http模块 在node中HTT…

dotNet 之数据库sqlite

Sqlite3是个特别好的本地数据库&#xff0c;体积小&#xff0c;无需安装&#xff0c;是写小控制台程序最佳数据库。NET Core是同样也是.NET 未来的方向。 **硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 D…