当前位置: 首页 > news >正文

你需要知道的 7 个 Vue3 技巧

VNode 钩子

在每个组件或html标签上,我们可以使用一些特殊的(文档没写的)钩子作为事件监听器。这些钩子有:

  • onVnodeBeforeMount

  • onVnodeMounted

  • onVnodeBeforeUpdate

  • onVnodeUpdated

  • onVnodeBeforeUnmount

  • onVnodeUnmounted

我主要是在组件上使用onVnodeMounted,当需要在组件挂载时执行一些代码,或者在更新时使用onVnodeUpdated进行调试,可以确定的是所有这些钩子都能在某些情况下派上用场。

例子:

<scriptsetup>import { ref } from'vue'const count = ref(0)functiononMyComponentMounted() {}functiondivThatDisplaysCountWasUpdated() {}
</script><template><MyComponent @vnodeMounted="onMyComponentMounted" /><div @vnodeUpdated="divThatDisplaysCountWasUpdated">{{ count }}</div></template>

应该注意的是,这些挂钩将一些参数传递给回调函数。它们只传递一个参数,即当前 VNode,除了onVnodeBeforeUpdate传递onVnodeUpdated两个参数,当前 VNode 和前一个 VNode。

调试挂钩

我们都知道 Vue 为我们提供的生命周期钩子。但是您知道 Vue 3 为我们提供了两个可用于调试目的的钩子吗?他们是:

  • onRenderTracked

  • onRenderTriggered

onRenderTracked为已跟踪的每个反应性依赖项调用。

<scriptsetup>import { ref, onRenderTracked } from'vue'const count = ref(0)
const count2 = ref(0)// It will be called twice, once for count and once for count2
onRenderTracked((event) => {console.log(event)
})
</script>

onRenderTriggered当我们触发反应性更新时被调用,或者如文档所说:“当反应性依赖触发组件的渲染效果重新运行时”。

<scriptsetup>import { ref, onRenderTriggered } from'vue'const count = ref(0)// It will be called when we update count
onRenderTriggered((event) => {debugger
})
</script>

从子组件公开插槽

如果您使用第三方组件,您可能会将其实现包装在您自己的“包装器”组件中。这是一个很好的实践和可扩展的解决方案,但那样的话,第三方组件的插槽就会丢失,我们应该找到一种方法将它们暴露给父组件:

WrapperComponent.vue

<template><divclass="wrapper-of-third-party-component"><ThirdPartyComponentv-bind="$attrs"><!-- Expose the slots of the third-party component --><templatev-for="(_, name) in $slots" #[name]="slotData"><slot:name="name"v-bind="slotData || {}"></slot></template></ThirdPartyComponent></div></template>

现在每个使用的组件都WrapperComponent可以使用ThirdPartyComponent的插槽。

作用域样式和多根节点不能很好地协同工作

在 Vue 3 中,我们终于可以拥有不止“一个根节点”的组件。这很好,但我个人在这样做时遇到了设计限制。假设我们有一个子组件:

<template><pclass="my-p">First p</p><pclass="my-p">Second p</p></template>

和一个父组件:

<template><h1>My awesome component</h1><MyChildComponent /></template><stylescoped>
// There is no way to style the p tags of MyChildComponent
.my-p { color: red; }
:deep(.my-p) { color: red; }
</style>

无法从多根父组件的作用域样式设置子组件的 p 标签的样式。

所以简而言之,一个多根组件,不能使用作用域样式来定位多根子组件的样式。

解决这个问题的最好方法是包装父组件或子组件(或两者),这样我们就只有一个根元素。

但是如果你绝对需要两者都有多根节点,你可以:

  • 使用非作用域样式

<style>.my-p { color: red; }
</style>
  • 使用 css 模块

<template><h1>My awesome component</h1><MyChildComponent:class="$style.trick" /></template><stylemodule>.trick {color: red;
}
</style>

既然我们在这里指定了一个类,那么多根子组件就得显式指定属性 fallthrough 行为。

如果你想要我的意见,除非你绝对需要一个多根节点组件,否则请使用单个根节点并且根本不要处理这个设计限制。

使用 CSS 选择器时要小心

#main-nav > li {}将比 . 慢很多倍.my-li { color: red }。从文档:

由于浏览器呈现各种 CSS 选择器的方式,p { color: red } 在范围内(即与属性选择器结合使用时)会慢很多倍。如果您改用类或 ID,例如在 .example { color: red } 中,那么您几乎可以消除性能损失。

如果您想更深入地研究这个主题,我强烈建议您阅读Efficiently Rendering CSS 。

布尔转换

在 Vue 2 或 Vue 3 的早期版本中,对于具有布尔类型的道具,我们根据顺序有不同的行为:

第一种情况:

props: {hoverColor: [String, Boolean] // <- defaults to ''
}

第二种情况:

props: {hoverColor: [Boolean, String] //<-defaultstofalse
}

不仅如此,如果你像这样传递 prop:

<my-componenthover-color></my-component>

在第一种情况下,它将是一个空字符串''。在第二种情况下,它将是true.

如您所见,这有点混乱和不一致。幸运的是,在 Vue 3 中,我们有一个一致且可预测的新行为:

Boolean无论类型出现顺序如何,行为都将适用。

所以:

hoverColor: [String, Boolean] // <- defaults to falsehoverColor: [Boolean, String] // <- defaults to falsehoverColor: [Boolean, Number] // <- defaults to false

带有 v-for 的模板引用 - 不能保证顺序

记住这个,这样你就不会浪费数小时的调试时间来弄清楚发生了什么

在下面的代码中:

<scriptsetup>import { ref } from"vue";const list = ref([1, 2, 3]);
const itemRefs = ref([]);
</script><template><ul><liv-for="item in list"ref="itemRefs":key="item">{{ item }}</li></ul></template>

我们在列表数组上循环,并创建 itemRefs 数组。itemRefs不保证与列表数组有相同的顺序。如果你想了解更多这方面的信息,你可以阅读这个issue。

相关文章:

你需要知道的 7 个 Vue3 技巧

VNode 钩子在每个组件或html标签上&#xff0c;我们可以使用一些特殊的&#xff08;文档没写的&#xff09;钩子作为事件监听器。这些钩子有&#xff1a;onVnodeBeforeMountonVnodeMountedonVnodeBeforeUpdateonVnodeUpdatedonVnodeBeforeUnmountonVnodeUnmounted我主要是在组件…...

行政区划获取

行政区划获取一、导入jar包二、代码展示背景&#xff1a;公司的行政区划代码有问题&#xff0c;有的没有街道信息&#xff0c;有的关联信息有误&#xff0c;然后找到了国家的网站国家统计局-行政区划&#xff0c;这个里面是包含了所有的行政信息&#xff0c;但是全是html页面&a…...

让ChatGPT介绍一下ChatGPT

申请新必应内测通过了&#xff0c;我在New Bing中使用下ChatGPT&#xff0c;让ChatGPT介绍一下ChatGPT 问题1&#xff1a;帮我生成一篇介绍chatGPT的文章&#xff0c;不少于2000字 回答&#xff1a; chatGPT是什么&#xff1f;它有什么特点和用途&#xff1f; chatGPT是一种…...

【Redis】Redis 主从复制 + 读写分离

Redis 主从复制 读写分离1. Redis 主从复制 读写分离介绍1.1 从数据持久化到服务高可用1.2 主从复制1.3 如何保证主从数据一致性&#xff1f;1.4 为何采用读写分离模式&#xff1f;2. 一主两从环境准备2.1 配置文件2.2 启动 Redis3. 主从复制原理3.1 全量同步3.1.1 建立连接3…...

2023届秋招,鬼知道我经历了什么

仅记录个人经历&#xff0c;充满主观感受&#xff0c;甚至纯属虚构&#xff0c;仅供参考&#xff0c;杠就是你对 本想毕业再写&#xff0c;但是考虑到等毕业了&#xff0c;24秋招的提前批就快开始了&#xff0c;大概就来不及了&#xff0c;正好现在有点时间&#xff0c;陆陆续…...

ChatGPT助力校招----面试问题分享(一)

1 ChatGPT每日一题&#xff1a;期望薪资是多少 问题&#xff1a;面试官问期望薪资是多少&#xff0c;如何回答 ChatGPT&#xff1a;当面试官问及期望薪资时&#xff0c;以下是一些建议的回答方法&#xff1a; 1、调查市场行情&#xff1a;在回答之前&#xff0c;可以先调查一…...

CSS媒体查询@media (prefers-color-scheme:dark)判断系统白天黑夜模式

前言 在最近学习中突然看到了在媒体查询中prefers-color-scheme:dark监听的使用&#xff0c;然后就模仿里边写了个简单例子&#xff0c;代码如下&#xff1a; body {background-color: #f5f5f5;}media (prefers-color-scheme: dark) {body {background-color: #666;}}然后通过…...

运行YOLOv8实现识别

https://github.com/ultralytics/ultralyticshttps://docs.ultralytics.com/环境配置官方环境要求Python>3.7&#xff08;我是python3.8也是可以用的&#xff09; environment with PyTorch>1.7.这是ultralyticsCommand Line Interface命令行接口运行输入参数的格式yolo …...

如何在Linux中优雅的使用 head 命令,用来看日志简直溜的不行

当您在 Linux 的命令行上工作时&#xff0c;有时希望快速查看文件的第一行&#xff0c;例如&#xff0c;有个日志文件不断更新&#xff0c;希望每次都查看日志文件的前 10 行。很多朋友使用文本编辑的命令是vim&#xff0c;但还有个命令head也可以让轻松查看文件的第一行。 在…...

Nginx.conf 配置详解

#安全问题&#xff0c;建议用nobody,不要用root. #user nobody; #worker数和服务器的cpu数相等是最为适宜 worker_processes 2; #work绑定cpu(4 work绑定4cpu) worker_cpu_affinity 0001 0010 0100 1000 #error_log path(存放路径) level(日志等级) path表示日志路径&…...

剖析NLP历史,看chatGPT的发展

1、NLP历史演进 1.1 NLP有监督范式 ​ NLP里的有监督任务的范式&#xff0c;可以归纳成如下的样子。 输入是字词序列&#xff0c;中间一步关键的是语义表征&#xff0c;有了语义表征之后&#xff0c;然后交给下游的模型学习。所以预训练技术的发展&#xff0c;都是在围绕怎么…...

20个Python使用小技巧,建议收藏~

1、易混淆操作 本节对一些 Python 易混淆的操作进行对比。 1.1 有放回随机采样和无放回随机采样 import random random.choices(seq, k1) # 长度为k的list&#xff0c;有放回采样 random.sample(seq, k) # 长度为k的list&#xff0c;无放回采样1.2 lambda 函数的参数 …...

Kafka 主题管理

Kafka 主题管理创建主题查看主题修改主题内部主题异常主题删除失败创建主题 创建 Kafka 主题 create : 创建主题partitions : 主题的分区数replication-factor : 每个分区下的副本数 bin/kafka-topics.sh \ --bootstrap-server broker_host:port \ --create --topic my_topi…...

【深度学习】GPT系列模型:语言理解能力的革新

GPT-1&#x1f3e1; 自然语言理解包括一系列不同的任务&#xff0c;例如文本蕴涵、问答、语义相似度评估和文档分类。尽管大量的未标记文本语料库很充足&#xff0c;但用于学习这些特定任务的标记数据却很稀缺&#xff0c;使得判别式训练模型难以达到良好的表现。我们证明&…...

【Vue.js】全局状态管理模式插件vuex

文章目录全局状态管理模式Vuexvuex是什么&#xff1f;什么是“状态管理模式”&#xff1f;vuex的应用场景Vuex安装开始核心概念一、State1、单一状态树2、在 Vue 组件中获得 Vuex 状态3、mapState辅助函数二、Getter三、Mutation1、提交载荷&#xff08;Payload&#xff09;2、…...

JPA 之 Hibernate EntityManager 使用指南

Hibernate EntityManager 专题 参考&#xff1a; JPA – EntityManager常用API详解EntityManager基本概念 基本概念及获得 EntityManager 对象 基本概念 在使用持久化工具的时候&#xff0c;一般都有一个对象来操作数据库&#xff0c;在原生的Hibernate中叫做Session&…...

英语作文提示(持续更新)

星期&#xff08;介词on&#xff09;Monday星期一Tuesday星期二Wednesday星期三Thursday星期四Friday星期五Saturday星期六Sunday星期日月份&#xff08;介词in&#xff09;lunar calendar农历on the second day of the second lunar农历初二January1月February2月March3月Apri…...

【计算机组成原理】计算机的性能指标、数据的表示和运算、BCD码和余3码

计算机组成原理(二) 计算机的性能指标: 存储器的性能指标&#xff1a; 存储器中&#xff0c;MAR为存储单元的个数 MDR为机械字长也就是存储单元的长度 存储器的大小MAR*MDR n为二进制位能表示出几种不同的状态呢&#xff1f; 2的n次方种不同的状态 CPU的性能指标&#xf…...

三天吃透MySQL八股文(2023最新整理)

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…...

队列_23约瑟夫问题+_24猫狗收容所

约瑟夫问题 n 个小孩围坐成一圈&#xff0c;并按顺时针编号为1,2,…,n&#xff0c;从编号为 p 的小孩顺时针依次报数&#xff0c;由1报到m &#xff0c;当报到 m 时&#xff0c;该小孩从圈中出去&#xff0c;然后下一个再从1报数&#xff0c;当报到 m 时再出去。如此反复&#…...

gradle

Gradle环境介绍OpenJDK 17.0.5Gradle 7.6示例代码 fly-gradleGradle 项目下文件介绍如果你的电脑安装了 gradle&#xff0c;可以使用 gradle init 去初始化一个新的 gradle 工程&#xff0c;然后使用电脑安装的 gradle 去执行构建命令。但是每个开发电脑上的 gradle 版本不一样…...

[牛客]链表中倒数第k个结点

使用快慢指针法:两种思路:1.fast先向后走k-1次,slow再向后走1次,然后fast和slow同时向后走,当fast走到最后一个结点时,slow刚好在倒数第k个位置上;2.fast先向后走k次,slow再向后走1次,然后fast和slow同时向后走,当fast走到最后一个结点的后面时(此时为NULL),slow刚好在倒数第k个…...

English Learning - L2 语音作业打卡 双元音 [eɪ] [aɪ] Day14 2023.3.6 周一

English Learning - L2 语音作业打卡 双元音 [eɪ] [aɪ] Day14 2023.3.6 周一&#x1f48c;发音小贴士&#xff1a;&#x1f48c;当日目标音发音规则/技巧:&#x1f36d; Part 1【热身练习】&#x1f36d; Part2【练习内容】&#x1f36d;【练习感受】&#x1f353;元音 /eɪ/…...

C++ this 指针与静态成员

文章目录参考描述实例成员与静态成员实例成员静态成员静态成员属性隐式形参 this 指针冲突this 指针静态成员函数this 指针与静态成员函数参考 项目精通C &#xff08;第九版&#xff09;托尼加迪斯、朱迪沃尔特斯、戈德弗雷穆甘达 &#xff08;著&#xff09; / 黄刚 等 &…...

REDIS16_LRU算法概述、查看默认内存、默认是如何删除数据、缓存淘汰策略

文章目录①. LRU算法概述②. 查看默认内存③. 如何删除数据④. 缓存淘汰策略①. LRU算法概述 ①. LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的数据给予淘汰 (leetcode-cn.com/problems/lru-cache) ②. LRU算法题来源 ③.…...

ClassMix: Segmentation-Based Data Augmentation for Semi-Supervised Learning学习笔记

ClassMix相关介绍主要思想方法Mean-Teacher损失函数交叉熵损失标签污染实验实验反思参考资料相关介绍 从DAFormer溯源到这篇文章&#xff0c;ClassMix主要是集合了伪标签和一致性正则化&#xff0c;思想来源于CutMix那条研究路线&#xff0c;但是优化了CutMix中的标签污染的情…...

CSDN竞赛第35期题解

CSDN竞赛第35期题解 1、题目名称&#xff1a;交换后的or 给定两组长度为n的二进制串&#xff0c;请问有多少种方法在第一个串中交换两个不同位置上的数字&#xff0c;使得这两个二进制串“或”的 结果发生改变&#xff1f; int n;cin>>n; string a,b;cin>>a>…...

Java应用服务系统安全性,签名和验签浅析

1 前言 随着互联网的普及&#xff0c;分布式服务部署越来越流行&#xff0c;服务之间通信的安全性也是越来越值得关注。这里&#xff0c;笔者把应用与服务之间通信时&#xff0c;进行的的安全性相关&#xff0c;加签与验签&#xff0c;进行了一个简单的记录。 2 安全性痛点 …...

spring中bean的实例化

构造方法实现实例化 无参构造器实例化 我们之前用的就一直是无参构造器实现实例化&#xff0c;虽然没有在类中写构造器&#xff0c;但是每个类都会有一个默认的无参构造器 有参构造器实例化 相比于无参构造器&#xff0c;我们只需要传入参数就可以了 我们可以通过construc…...

磨皮插件portraiture2023最新中文版

Portraiture滤镜是一款 Photoshop&#xff0c;Lightroom 和 Aperture 插件&#xff0c;DobeLighttroom 的 Portraiture 消除了选择性掩蔽和逐像素处理的繁琐的手工劳动&#xff0c;以帮助您在肖像修整方面取得卓越的效果。它是一个强大的&#xff0c;但用户友好的插件照明.这是…...

做企业网站用什么软件/扬州百度seo公司

1.GUI界面添加Mysql模板Configuration --> Hosts --> 点击要添加的主机 --> Templates添加新的模板&#xff0c;点击Select -->选择”Template DB MySQL“点击“add”添加&#xff0c;最后点击Update更新&#xff1b;2.登陆MySQL服务&#xff0c;创建只读账户&…...

做网站做注册登录的难点/网络营销的企业有哪些

1. vi与vim的关系 在windows下的默认编辑器是记事本&#xff08;notepad&#xff09;&#xff0c;然而功能太low&#xff0c;所以我一般使用的是notepad这个文本编辑器软件。可以类比得到&#xff0c;vi是linux的默认编辑器&#xff0c;vim则是其升级版本&#xff0c;vim是推荐…...

档案网站建设图片/手机百度官网

面向对象有这个强大特点和作用, 著名的三大特点:封装, 继承, 多态 这篇博客写的是super()的简单理解和使用 今天在读restframework的源码的时候, 发现源码中使用了super, 依以此为入口, 重写了django的as_view() 在代码执行的过程中既执行了自己的as_view()有执行了django的as_…...

长沙模板建站欢迎咨询/如何优化搜索引擎

实变函数习题集-数学与计算科学学院-安庆师范大学实变函数习题集数学与计算科学学院函数论教研室2017年11月目 录第一章 集合……………………………………………………………1第二章 点集……………………………………………………………24第三章 Lebesgue测度………………………...

甘肃省通信管理局 网站备案/新的数据新闻

我喜欢的一条(还有很多)关于Salt的事情是它本身并没有一种模糊的语言:正如我一直想提到的&#xff0c;只需要YAML和Jinja&#xff0c;每个3条规则&#xff0c;你就可以开始自动化。例如&#xff0c;当你需要一个简单迭代时&#xff0c;并不需要阅读全部文档并查看“在列表中迭代…...

服装品牌建设网站的目的/丽水百度seo

灯光的亮度控制需要一个滑动条&#xff0c;先借用lamp源码中Bar&#xff1a; var Bar function (opt) {var defaults {$id: "", // 进度条dom节点idmin: 1, // 刻度最小值stepCount: 5, // 刻度步数step: 1, // 刻度步长$alpha: "",//显示亮度的idtouchE…...