Vue3语法系统进阶 - 全面掌握Vue3特性

news2024/11/15 13:41:06

目录

  • 01-ref属性在元素和组件上的分别使用
  • 02-利用nextTick监听DOM更新后的情况
  • 03-自定义指令与自定义全局属性及应用场景
  • 04-复用组件功能之Mixin混入
  • 05-插件的概念及插件的实现
  • 06-transition动画与过渡的实现
  • 07-动态组件与keep-alive组件缓存
  • 08-异步组件与Suspense一起使用
  • 09-跨组件间通信方案 Provide_Inject
  • 10-Teleport实现传送门功能
  • 11-虚拟DOM与render函数及Diff算法虚拟DOM

01-ref属性在元素和组件上的分别使用

Vue是基于MVVM设计模式进行实现的,视图与数据不直接进行通信,但是Vue并没有完全遵循这一原则,而是允许开发者直接进行原生DOM操作。

  • 在Vue中可通过ref属性来完成这一行为,通过给标签添加ref属性,然后再通过vm.$refs来获取DOM
  • ref属性添加给组件,可以获取到组件的实例对象,间接地实现组件之间的通信
<template>
  <div>
    <h2>ref属性</h2>
    <button @click="handleClick">点击</button>
    <div ref="elem">aaaaaaaaa</div>
    <div ref="elem2">bbbbbbbbb</div>
    <my-head ref="elem3"></my-head>
  </div>
</template>

<script>
  import MyHead from '@/2_头部组件.vue'
  export default {
    methods: {
      handleClick(){
        // ref属性添加到元素身上,可以获取到当前元素的原生DOM
        console.log( this.$refs.elem );
        console.log( this.$refs.elem2 );

		//ref属性添加到组件身上,可以获取到当前组件的vm对象(实例对象)
        this.$refs.elem3.handleMessage('根组件的数据');
      }
    }
  }
</script> 

2_头部组件.vue文件:

<template>
  <div>
    hello myhead
  </div>
</template>

<script>
  export default {
    data(){
      return {
        message: '头部组件的消息'
      }
    },
    methods: {
      handleMessage(data){
        console.log(data);
      }
    }
  }
</script>

02-利用nextTick监听DOM更新后的情况

  • 主要作用:将回调推迟到下一个 DOM 更新周期之后执行。在更改了一些数据以等待 DOM 更新后立即使用它
  • 默认情况下,数据的更新会产生一个很小的异步延迟,所以直接在数据改变后取获取DOM是得不到DOM更新后的结果,而得到的是DOM更新前的结果
  • 如何才能得到DOM更新后的结果呢,可以有两种方案:
    • 第一种就是利用生命周期updated这个钩子函数
    • 第二种就是利用我们讲的nextTick方法,支持两种风格即回调和promise
      在这里插入图片描述

03-自定义指令与自定义全局属性及应用场景

  • 除了核心功能默认内置的指令 (例如v-model v-show),Vue 也允许注册自定义指令,来实现一些封装功能。
  • 自定义指令的实现
    • 实现一个简单的v-color指令,用于给元素添加背景色
      -
    • 下面我们来完成一个实际可以应用的指令,按钮权限指令,一般情况下这种指令不会局部使用,而是全局使用,所以可以通过vue来实现一个全局的按钮权限指令
      在这里插入图片描述
  • 自定义全局属性
    • 添加一个可以在应用的任何组件实例中访问的全局 property,这样在引入一些第三方模块的时候,就不用每一次进行import操作,而是直接通过this对象去访问全局属性即可,下面举一个例子,实现一个http的全局属性。
      在这里插入图片描述

04-复用组件功能之Mixin混入

  • 它是选项式API的一种复用代码的形式,通过混入mixin的方式,我们可以将一些公共的数据、方法或计算属性复用到多个组件中,提高代码的可维护性和重用性.
    在这里插入图片描述
  • mixin存在的问题就是不够灵活,不支持传递参数,这样无法做到差异化的处理,所以目前比较推荐的复用操作还是选择使用组合式API中的use函数来完成复用的逻辑处理

05-插件的概念及插件的实现

  • 插件是自包含的代码,通常向 Vue 添加全局级功能。例如:全局方法、全局组件、全局指令、全局mixin等等。基
  • 于Vue的第三方模块都是需要通过插件的方式在Vue中进行生效的,比如:Element PlusVue RouterVuex等等。
    在这里插入图片描述

06-transition动画与过渡的实现

  • Vue中通过两个内置的组件来实现动画与过渡效果,分别是:<transition><transition-group>
    在这里插入图片描述
    在这里插入图片描述

07-动态组件与keep-alive组件缓存

  • 动态组件
    • 动态组件可以实现在同一个容器内动态渲染不同的组件,依一个内置组件<component>is属性的值,来决定使用哪个组件进行渲染。
      在这里插入图片描述
  • keep-alive组件
    当我们点击的时候,就会进行组件的切换。在每次切换的过程中都会重新执行组件的渲染,这样组件操作的行为就会还原,而我们如何能够保证组件不变呢?可以利用<keep-alive>对组件进行缓存,这样不管如何切换,都会保持为初始的组件渲染,这样可以很好的保留之前组件的行为。
    组件的切换也可以配合<transition>完成动画的切换。
    在这里插入图片描述

08-异步组件与Suspense一起使用

  • 异步组件
    • 在大型应用中,我们可能需要将应用分割成小一些的代码块,并且只在需要的时候才从服务器加载一个模块。

    • 对于大型项目来说,如果能实现按需载入的话,那么势必会对性能有所提升,在Vue中主要就是利用defineAsyncComponent来实现异步组件的。
      在这里插入图片描述

  • Suspense组件
    • 由于异步组件是点击切换的时候才去加载的,所以可能会造成等待的时间,那么这个时候可以配合一个loading效果,在Vue中提供了一个叫做<Suspense>的组件用来完成loading的处理。
      在这里插入图片描述

09-跨组件间通信方案 Provide_Inject

正常情况下,我们的组件通信是需要一级一级的进行传递,通过父子通信的形式,那么如果有多层嵌套的情况下,从最外层把数据传递给最内层的组件就非常的不方便,需要一级一级的传递下来,那么如何才能方便的做到跨组件通信呢?

可以采用Provide inject 依赖注入的方式来完成需求
在这里插入图片描述
在这里插入图片描述

10-Teleport实现传送门功能

  • Teleport组件
    • Teleport可以实现传送门功能,也就是说逻辑属于当前组件中,而结构需要在组件外进行渲染,例如:按钮模态框组件。
      在这里插入图片描述
  • 逻辑组件
    • 但是往往我们需要的并不是普通组件的调用方式,而是逻辑组件的调用方式:
      在这里插入图片描述

11-虚拟DOM与render函数及Diff算法虚拟DOM

  • 虚拟DOM
    • Vue框架帮我们完成了大量的DOM操作,那么在底层Vue并没有直接操作真实的DOM,因为真实的DOM直接去操作是非常好性能的,所以最好在JS环境下进行操作,然后在一次性进行真实DOM的操作。
      在这里插入图片描述
    • 内置的render函数可以把字符串转换成虚拟DOM。
      在这里插入图片描述
  • Diff算法
    • 当更新的时候,一个依赖发生变化后,副作用会重新运行,这时候会创建一个更新后的虚拟 DOM 树。运行时渲染器遍历这棵新树,将它与旧树进行比较,然后将必要的更新应用到真实 DOM 上去。

    • 而两个虚拟DOM进行对比的时候,需要加入一些算法提高对比的速度,这个就是Diff算法。
      在这里插入图片描述

  • 在脚手架下我们推荐使用:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

合宙Air724UG LuatOS-Air LVGL API控件--曲线 (Arc)

曲线 (Arc) 曲线控件&#xff0c;也可以称为弧。因为 Arc 本身就是弧&#xff0c;弧形的意思。根据控件的样子也能推测出它的使用场景&#xff0c;一般用在加载器(就是等待界面转的圈圈)或者数值显示&#xff0c;数值调节这些场景。曲线控件分了两个部分&#xff0c;前景和背…

机器学习笔记之优化算法(十六)梯度下降法在强凸函数上的收敛性证明

机器学习笔记之优化算法——梯度下降法在强凸函数上的收敛性证明 引言回顾&#xff1a;凸函数与强凸函数梯度下降法&#xff1a;凸函数上的收敛性分析 关于白老爹定理的一些新的认识梯度下降法在强凸函数上的收敛性收敛性定理介绍结论分析证明过程 引言 本节将介绍&#xff1a…

Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并

效果如图&#xff0c;姓名 数值1 字段进行自动合并 封装合并列js - tableMerge.js // 获取列合并的行数 // params // tableData: 表格数据 // mergeId: 合并的列的字段名 export const tagRowSpan (tableData, mergeId) >{const tagArr [];let pos 0;tableData.map((i…

CentOS KVM虚拟安装和开机启动

1. 配置系统 关闭SELinux setenforce 0持久化关闭配置 vi /etc/selinux/config2. 安装虚拟化软件 安装 KVM、QEMU等虚拟化软件。 yum install qemu-kvm qemu-img virt-manager libvirt virt-install virt-viewer 检查LVM模块是否已经加载 lsmod |grep kvm设置开机启动 s…

【C语言】扫雷游戏(可展开)——超细教学

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将运用数组来实现 扫雷游戏。 目录&#xff1a; &#x1f31f;思路框架测试游戏 &#x1f31f;测试部分函数实现&am…

SimSolid技术原理解析 衡祖仿真

面向超大规模结构的无网格分析软件Altair SimSolid&#xff0c;自从面世以来&#xff0c;受到广大工程师的关注。SimSolid 是面向设计师、工程师和分析师的颠覆性仿真技术&#xff0c;可在几分钟内对结构复杂的 CAD 装配体进行结构分析。它消除了传统结构仿真中非常耗时、非常专…

农业水价综合改革系统主要组成

一、系统概述 农业水价改革灌区信息化系统主要由感知采集层、网络传输层、系统应用层等部分组成。通过无线技术、感知层技术与新型应用的有效结合&#xff0c;可以用于各种业务的传送&#xff0c;充分满足灌区监测站间的物与物互联&#xff0c;农业生产的自动化和信息化相结合。…

计算机系统简介

计算机系统简介 计算机系统 硬件 计算机实体&#xff0c;如主机、外设软件 具有各类特殊功能的信息&#xff08;程序&#xff09;组成 软件 系统软件 用来管理整个计算机系统 &#xff08;语言处理程序、操作系统、服务性程序、数据库管理系统、网络软件&#xff09;应用…

Apple用户如何利用Twinmotion路径追踪器渲染

Twinmotion 是一款功能强大的实时可视化工具&#xff0c;允许设计人员为建筑设计、产品设计等创建高质量的渲染和交互体验。其当前最强大的渲染功能之一是路径追踪器&#xff0c;它通过精确的照明计算生成逼真的图像。 然而&#xff0c;许多 Apple 用户想知道如何利用 Twinmot…

生物医学翻译,选择专业翻译公司有何优势

我们知道&#xff0c;生物医学翻译是基于生物医学等相关行业的翻译服务&#xff0c;具有较强的专业性和复杂性&#xff0c;为了确保生物医学翻译的质量&#xff0c;务必选择专业的翻译公司。那么&#xff0c;专业翻译公司有何优势&#xff0c;北京生物医学翻译哪家好&#xff1…

【python】Leetcode(primer-set)

文章目录 78. 子集&#xff08;集合的所有子集&#xff09;90. 子集 II&#xff08;集合的所有子集&#xff09; 更多 leetcode 题解可参考&#xff1a;【Programming】 78. 子集&#xff08;集合的所有子集&#xff09; 给定一组不含重复元素的整数数组 nums&#xff0c;返回…

【python】Leetcode(primer-binary)

文章目录 504. 七进制数&#xff08;进制转换&#xff09;461. 汉明距离&#xff08;进制转换 / 异或&#xff09;136. 只出现一次的数字&#xff08;位运算&#xff09; 更多 leetcode 题解可参考&#xff1a;【Programming】 504. 七进制数&#xff08;进制转换&#xff09; …

Python学习 -- 类的继承

类继承是面向对象编程中的重要概念&#xff0c;它允许我们创建一个新的类&#xff0c;通过继承已有的类的属性和方法&#xff0c;从而实现代码的重用和扩展。Python作为一门面向对象的编程语言&#xff0c;提供了强大而灵活的类继承机制。本篇博客将深入探讨Python中类继承的概…

全国规模最大!算力并网行动开启

8月19日&#xff0c;在2023中国算力大会主论坛上&#xff0c;中国移动携手多个超算中心、智算中心&#xff0c;以及云服务商&#xff0c;共同发起全国规模最大的“百川”算力并网行动&#xff0c;打造算力类型最全、规模最大、覆盖最广的“百川”算力并网平台&#xff0c;加快推…

ngix详解

ngix是什么 Nginx是一款轻量级、高性能的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。 正向代理&#xff1a; 客户端访问服务器时&#xff0c;统一通过一个代理服务器把请求…

Flutter实现动画列表AnimateListView

由于业务需要&#xff0c;在打开列表时&#xff0c;列表项需要一个从右边飞入的动画效果&#xff0c;故封装一个专门可以执行动画的列表组件&#xff0c;可以自定义自己的动画&#xff0c;内置有水平滑动&#xff0c;缩放等简单动画。花里胡哨的动画效果由你自己来定制吧。 功…

在本地搭建Jellyfin影音服务器,支持公网远程访问影音库的方法分享

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

爆火「视频版ControlNet」开源了!靠提示词精准换画风,全华人团队出品

“视频版ControlNet”来了&#xff01; 让蓝衣战神秒变迪士尼公举&#xff1a; 视频处理前后&#xff0c;除了画风以外&#xff0c;其他都不更改。 女孩说话的口型都保持一致。 正在插剑的姜文&#xff0c;也能“下一秒”变猩球崛起了。 这就是由全华人团队打造的最新视频处理…

四川玖璨电子商务有限公司:怎么拉升抖店体验分

抖音是中国最受欢迎的短视频分享平台之一&#xff0c;而在抖音上开设自己的抖店成为许多电商从业者的选择。为了提高抖店的曝光度和用户体验&#xff0c;抖店体验分成为了一个重要的指标。在本文中&#xff0c;小编将从两个方面来讨论怎么拉升抖店体验分&#xff0c;包括影响因…

你真的理解 shell 中的 $?

$? 是一个特殊变量&#xff0c;用于获取上一个命令或函数的退出状态码&#xff0c;这里要注意的是状态码和返回值是不同的概念。在函数中我们可以使用返回标志 return&#xff0c;return 的返回值会作为退出状态码供 $? 截取&#xff0c;当函数没有 return 返回值时&#xff…