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

vue3开发必备核心要点

1、route/router的区别

● $route 表示当前激活的路由的状态信息,包含了当前URL解析得到的信息,包含当前的path路径,params参数,query对象,name路径名等属性
r o u t e r 路由器对象( n e w 的路由器对象),包含一些操作路由的功能函数,来实现编程式导航。一般指的是在任何组件内访问路由。如:路由编程式导航的 router 路由器对象(new的路由器对象),包含一些操作路由的功能函数,来实现编程式导航。一般指的是在任何组件内访问路由。如:路由编程式导航的 router路由器对象(new的路由器对象),包含一些操作路由的功能函数,来实现编程式导航。一般指的是在任何组件内访问路由。如:路由编程式导航的router.push()
● 获取路由参数

import { useRoute,useRouter } from "vue-router"
//  useRoute 相当于vue2中的this.$route(),表示当前的路由对象
//  useRouter 相当于vue2中的this.$router(),表示全局的路由对象
const route = useRoute()
const query=route.query  // 地址兰参数
const prarams=route.params
// 使用router
const router = useRouter()
query=router.currentRoute.value.query
prarams=router.currentRoute.value.params

2、setup的调用时机

创建组件实例,然后初始化 props ,紧接着就调用setup 函数。从生命周期钩子的视角来看,它会在 beforeCreate 钩子之前被调用 但是在vue2.x版本中,是先执行beforeCreatd 之后是setup再是created

3、reactive

● reactive() 会返回一个修改过的原始的对象,此行为与 Vue 2 中的 Vue.observable 一致,而在vue3中,reactive() 会返回一个新的的代理对象。
● 使用组合函数时必须始终保持对这个所返回对象的引用以保持响应性。这个对象不能被解构或展开,可以使用toRefsApi去解决这个问题

const user=reactive({name:'jake',age:28})
// 使用解构
const {name,age}=toRefs(user)

4、ref

● 为什么通过ref申明的会有这个value? 由于 JavaScript 中基础类型是值传递而非引用传递,一个响应式的值一旦作为 property 被赋值或从一个函数返回,而失去了响应性之后,也就失去了用途。为了确保始终可以读取到最新的计算结果,我们需要将这个值上包裹到一个对象中再返回。另外我们同样需要劫持对这个对象 .value property 的读/写操作,现在我们可以通过引用来传递计算值,也不需要担心其响应式特性会丢失了。当然代价就是:为了获取最新的值,我们每次都需要写 .value。
● 那为什么在template模板中,又不需要写.value了呢? 在渲染过程中,Vue 会直接使用其内部的值,也就是说在模板中你可以把 {{ count.value }} 直接写为 {{ count }} 。

5、script setup语法糖

● 自动注册子组件
● 属性和方法无需返回
● 支持props、emit和contex
setup script语法糖提供了三个新的API来供我们使用:definePropsdefineEmituseContext

/** child.vue */
<template>  <div>{{ props.msg }}</div><a-button type="primary" @click="handleClick">emit</a-button>
</template>
<script lang="ts" setup>import { ref, reactive, onMounted } from 'vue';// propslet props = defineProps({msg: {type: String,default: ''}});// emitconst emit = defineEmits(['child-click']);function handleClick() {emit('child-click', 'child组件的回传信息');}// 导出数据const childData = reactive({name: 'child',description: '这里是子组件的信息'});defineExpose({ childData });
</script>
/** main.vue */
<template><div>主页面</div><div><Child ref="childRef" :msg="msg" @child-click="handleClick"></Child><hr /><div>来自child的值{{ childMsg }}</div><a-button type="primary" @click="getInstance">获取实例</a-button></div>
</template>
<script lang="ts" setup>import Child from './child.vue';import { ref, reactive, onMounted, getCurrentInstance } from 'vue';const msg = ref('主页面的props');let childMsg = ref<string>('');const handleClick = (res: string) => {childMsg.value = res;};// 获取refFormconst childRef = ref();// 获取实例const instance = getCurrentInstance();function getInstance() {console.log('log内容getInstance', instance.refs['childRef'].childData);console.log('log内容childRef', childRef.value.childData);}
</script>
<style lang="less" scoped></style>

6、createVNode

const message = {setup() {const num = ref(1)return {num}},template: `<div><div>{{num}}</div><div>这是一个弹窗</div></div>`}// 初始化组件生成vdomconst vm = createVNode(message)// 创建容器,也可以用已经存在的const container = document.createElement('div')//render通过patch 变成domrender(vm, container)
// 弹窗挂到任何你想去的地方  
document.body.appendChild(container.firstElementChild)

6、v-model与update:value

/** main*/
<template><h3>pageTitle{{ pageTitle }}</h3><h4>obj:{{ obj.billNo }}--{{ obj.billEntity.billName }}</h4><hr /><child v-model:title="pageTitle" @emitFun="emitFun"></child>
</template><script lang="ts" setup>
import { ref, reactive } from 'vue';
import child from './child.vue';const pageTitle = ref('这是v-model:title');
const obj = reactive({billNo: '3333',billEntity: {billName: '单据名称',remark: '备注'}
});
const emitFun = (data: any) => {Object.assign(obj, data);
};/**child*/
<template><input type="text" @input="setInput" /><a-input @input="setInput"></a-input><a-button type="primary" @click="setValue">调用update:value</a-button>
</template><script lang="ts" setup>
const emit = defineEmits(['update:title', 'emitFun']);
let props = defineProps({msg: {type: String,default: ''}
});
function setInput(val: any) {emit('update:title', val.target.value);
}
function setValue() {emit('emitFun', {billNo: '3333-5555',billEntity: {billName: '单据名称child',remark: '备注child'}});
}
</script>

7、Suspense

Vue 3 中的Suspense特性允许你在异步组件加载时显示占位符,这有助于提高用户体验,同时减少了不必要的渲染。

8、Fragments(片段)

  • Fragments 允许你在不引入额外的 DOM 元素的情况下,将多个子元素包裹在一个父元素中。这有助于减少 DOM 结构的嵌套,使代码更清晰和简洁。
  • 你可以使用 元素或 Vue 3 提供的特殊语法 v-fragment 来创建一个 Fragment。
    下面示例中,<v-fragment> 包裹了两个 <p> 元素,但最终渲染的 DOM 结构中并不会包含额外的父元素。
<template><div><p>Paragraph 1</p><p>Paragraph 2</p><v-fragment><p>Paragraph 3</p><p>Paragraph 4</p></v-fragment></div>
</template>

9、Teleport(传送门)

  • Teleport 允许你将组件的内容渲染到 DOM 结构的不同位置,而不受父组件的限制。这对于处理模态框、对话框、通知消息等需要在页面的不同位置渲染的情况非常有用。
  • 你可以在模板中使用 <teleport> 元素,并将其 to 属性设置为一个目标选择器,以指定内容应该被渲染到哪个 DOM 元素中。
<template><div><button @click="showModal">Show Modal</button><teleport to="#modal-container"><Modal v-if="isModalVisible" @close="closeModal" /></teleport></div>
</template>

在上面的示例中,Modal 组件的内容会被渲染到页面中具有 id=“modal-container” 的 DOM 元素内部。

相关文章:

vue3开发必备核心要点

1、route/router的区别 ● $route 表示当前激活的路由的状态信息&#xff0c;包含了当前URL解析得到的信息&#xff0c;包含当前的path路径&#xff0c;params参数&#xff0c;query对象&#xff0c;name路径名等属性 ● r o u t e r 路由器对象&#xff08; n e w 的路由器对…...

针对敏感数据的安全转录服务

即便在新冠肺炎疫情期间&#xff0c;继续保持了最高级别的机密性 新冠肺炎疫情带来的各种限制向所有服务提供商提出了挑战&#xff0c;促使提供商们想方设法采取更富想象力的新方法来满足客户的需求。澳鹏采用了一种由两种方案组成的工作机制&#xff0c;服务于客户机密材料的…...

leetcode 10. 正则表达式匹配

2023.9.20 感觉是目前做过dp题里最难的一题了... 本题首要的就是需要理解题意&#xff0c;翻了评论区我才发现之前一直理解的题意是错的。 我原来理解的 “ *匹配0次” 是指&#xff1a;*直接消失&#xff0c;不会影响到前面的字符。 但是*和前一个字符其实是连体的&#xff0…...

Vue前端开发中的输入限制与输入规则探究

前言 在Vue前端开发中&#xff0c;我们经常需要对用户的输入进行限制和规范&#xff0c;以确保数据的准确性和安全性。本文将介绍如何使用Vue的el-input组件来实现输入限制和输入规则&#xff0c;并提供相应的代码示例。 一、输入限制 最大长度限制 我们可以使用maxlength属…...

自己封装 vue3+ts 组件库并且发布到 NPM

自己封装 vue3ts 组件库并且发布到 NPM 创建项目 pnpm create vite配置 package.json 按照提示创建好项目&#xff0c;然后再 package.json 中进行如下配置&#xff1a; {"name": "tribiani-vue-tools","private": false,"version"…...

MySQL学习系列(6)-每天学习10个知识

目录 1. 管理和维护大量的数据库表和数据2. 检测和修复MySQL性能瓶颈3. MySQL的视图缓存4. 处理MySQL并发问题5. 函数索引和全文索引6. UNION ALL 和 UNION 的区别7. 存储引擎的选择8. 存储过程和触发器9. 数据表管理和优化10. 数据库安全性和一致性 &#x1f44d; 点赞&#x…...

“毛细血管”的进化:华为分销业务如何让伙伴也有“高能级”

作者 | 曾响铃 文 | 响铃说 数字化蓬勃发展的大时代&#xff0c;除了那些中、大型企业&#xff0c;数量更为庞大的小微企业同样有借助数字化产品、服务来提升企业经营的需求&#xff0c;由此也带来了广袤的数字化分销市场。 这里处在聚光灯之外&#xff0c;很少被数字化时代…...

警惕!多本SCI/SSCI被剔除,9月SCI/SSCI期刊目录已更新~(附下载)

【SciencePub学术】 2023年9月20日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 继上次SCI期刊目录和SSCI期刊目录更新之后&#xff0c;本次9月更新共有9本期刊发生变动&#xff1a; • SCIE&#xff1a;有3本期刊不再被SCIE期刊目录收录(Editorial De-listing/Pr…...

一点整理

&#xff08;1&#xff09; 美国在2010年以后开始流行数字化转型的。 在2010年以前&#xff0c; 2006年社交网络FB “YOU”&#xff1a;在2004-2006 Web2.0热之前&#xff0c;企业是无法直接触达到每个消费者的2006年Amazon电子商务&#xff1a;这个是我瞎凑的&#xff0c;但因…...

Vulnhub系列靶机---Deathnote: 1死亡笔记

文章目录 信息收集主机发现端口扫描目录扫描dirsearchgobusterdirb扫描 漏洞利用wpscan扫描Hydra爆破 总结 靶机文档&#xff1a;Deathnote: 1 下载地址&#xff1a;Download (Mirror) 难易程度&#xff1a;so Easy 信息收集 主机发现 端口扫描 访问靶机的80端口&#xff0c;报…...

从基础到高阶:史上最小白的Attention机制详解——揭秘人工智能中的核心技术

1. Encoder-Decoder 想象一下你正在和一个会说多种语言的朋友对话。你用中文对他说了一句话&#xff0c;他将其“编码”成他的“内部语言”&#xff0c;然后再“解码”成英语给你回复。在这个过程中&#xff0c;“编码”就是Encoder&#xff0c;而“解码”就是Decoder。 在机…...

9.20金融科技(比特币)

​ 比特币的起源和发展 2008年爆发全球金融危机&#xff0c;同年11月1日&#xff0c;一个自称中本聪&#xff08;Satoshi Nakamoto&#xff09;的人在P2P foundation网站上发布了比特币白皮书《比特币&#xff1a;一种点对点的电子现金系 &#xff0c;陈述了他对电子货币的新设…...

什么是内存碎片?

在嵌入式系统中&#xff0c;内存是十分有限而且是十分珍贵的&#xff0c;用一块内存就少了一块内存&#xff0c;而在分配中随着内存不断被分配和释放&#xff0c;整个系统内存区域会产生越来越多的碎片。 因为在使用过程中&#xff0c;申请了一些内存&#xff0c;其中一些释放…...

C语言堆排序

堆排序&#xff08;Heapsort&#xff09;是一种在时间复杂度上达到了最优的基于比较的排序算法。堆排序算法是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构&#xff0c;并同时满足堆积的性质&#xff1a;即子节点的键值或索引总是小于&#xff0…...

【学习笔记】CF573E Bear and Bowling

感觉贪心的做法比较自然&#x1f914;&#xff0c;推荐 这篇博客 非常经典牛逼的贪心思路&#xff1a; 考虑每次加入一个数&#xff0c;位置 i i i的贡献为 V i k i a i b i V_ik_i\times a_ib_i Vi​ki​ai​bi​&#xff0c;其中 k i k_i ki​表示 i i i以前被选的位置的…...

函数扩展之——内存函数

前言&#xff1a;小伙伴们又见面啦。 本篇文章&#xff0c;我们将讲解C语言中比较重要且常用的内存函数&#xff0c;并尝试模拟实现它们的功能。 让我们一起来学习叭。 目录 一.什么是内存函数 二.内存函数有哪些 1.memcpy &#xff08;1&#xff09;库函数memcpy &…...

【在线机器学习】River对流数据进行机器学习

River是一个用于在线机器学习的Python库。它旨在成为对流数据进行机器学习的最用户友好的库。River是crme和scikit-multiflow合并的结果。 https://github.com/online-ml/river 举个简单示例&#xff0c;将训练逻辑回归来对网站网络钓鱼数据集进行分类。下面介绍了数据集中的…...

第 4 章 串(串的块链存储实现)

1. 背景说明 该实现和链表的实现极为相似&#xff0c;只是将链接的内存拆分为具体的大小的块。 2. 示例代码 1). status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_NULL(pointer) if (!(pointer)) { \printf("FuncN…...

Element表格之表头合并、单元格合并

一、合并表头 el-table配置 :header-cell-style"headFirst"headFirst({ row, colunm, rowIndex, columnIndex }) {let base { background-color: rgba(67, 137, 249, 0.3), color: #333, text-align: center };//这里为了是将第一列的表头隐藏&#xff0c;就形成了合…...

go学习-JS的encodeURIComponent转go

背景 encodeURIComponent() 函数通过将特定字符的每个实例替换成代表字符的 UTF-8 编码的一个、两个、三个或四个转义序列来编码 URI&#xff08;只有由两个“代理”字符组成的字符会被编码为四个转义序列&#xff09;。 与 encodeURI() 相比&#xff0c;此函数会编码更多的字…...

MySQL索引、事务与存储引擎

索引 事务 存储引擎 一、索引1.1 索引的概念1.2 索引的实现原理1.2 索引的作用1.3 创建索引的依据1.4 索引的分类和创建1.4.1 普通索引 index1.4.2 唯一索引 unique1.4.3 主键索引 primary key1.4.4 组合索引&#xff08;单列索引与多列索引&#xff09;1.4.5 全文索引 fulltex…...

【Spring面试】八、事务相关

文章目录 Q1、事务的四大特性是什么&#xff1f;Q2、Spring支持的事务管理类型有哪些&#xff1f;Spring事务实现方式有哪些&#xff1f;Q3、说一下Spring的事务传播行为Q4、说一下Spring的事务隔离Q5、Spring事务的实现原理Q6、Spring事务传播行为的实现原理是什么&#xff1f…...

Windows平台Qt6中UTF8与GBK文本编码互相转换、理解文本编码本质

快速答案 UTF8转GBK QString utf8_str"中UTF文"; std::string gbk_str(utf8_str.toLocal8Bit().data());GBK转UTF8 std::string gbk_str_given_by_somewhere"中GBK文"; QString utf8_strQString::fromLocal8Bit(gbk_str_given_by_somewhere.data());正文…...

【探索Linux】—— 强大的命令行工具 P.9(进程地址空间)

阅读导航 前言一、内存空间分布二、什么是进程地址空间1. 概念2. 进程地址空间的组成 三、进程地址空间的设计原理1. 基本原理2. 虚拟地址空间 概念 大小和范围 作用 虚拟地址空间的优点 3. 页表 四、为什么要有地址空间五、总结温馨提示 前言 前面我们讲了C语言的基础知识&am…...

ESP32主板-MoonESP32

产品简介 Moon-ESP32主板&#xff0c;一款以双核芯片ESP32-E为主芯片的主控板&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;低功耗&#xff0c;板载LED指示灯&#xff0c;引出所有IO端口&#xff0c;并提供多个I2C端口、SPI端口、串行端口&#xff0c;方便连接&#xff0c;…...

Python 图片处理笔记

import numpy as np import cv2 import os import matplotlib.pyplot as plt# 去除黑边框 def remove_the_blackborder(image):image cv2.imread(image) #读取图片img cv2.medianBlur(image, 5) #中值滤波&#xff0c;去除黑色边际中可能含有的噪声干扰#medianBlur( Inp…...

SpringCloud Ribbon--负载均衡 原理及应用实例

&#x1f600;前言 本篇博文是关于SpringCloud Ribbon的基本介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力…...

Redis的介绍以及简单使用

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据存储系统&#xff0c;它以键值对的形式将数据存在内存中&#xff0c;并提供灵活、高性能的数据访问方式。Redis具有高速读写能力和丰富的数据结构支持&#xff0c;可以广泛应用于缓存、消息队列、实…...

ad18学习笔记十二:如何把同属性的元器件全部高亮?

1、先选择需要修改的器件的其中一个。 2、右键find similar objects&#xff0c;然后在弹出的对话框中&#xff0c;将要修改的属性后的any改为same 3、像这样勾选的话&#xff0c;能把同属性的元器件选中&#xff0c;其他器件颜色不变 注意了&#xff0c;如果这个时候&#xff…...

SpringSecurity 核心过滤器——SecurityContextPersistenceFilter

文章目录 前言过滤器介绍用户信息的存储获取用户信息存储用户信息获取用户信息 处理逻辑总结 前言 SecurityContextHolder&#xff0c;这个是一个非常基础的对象&#xff0c;存储了当前应用的上下文SecurityContext&#xff0c;而在SecurityContext可以获取Authentication对象…...

wordpress主题可以更改主页布局/网络营销的推广

createWriteStream是Node.js中的一个方法&#xff0c;可以用来创建一个可写流。可写流是一种用于写入数据的流。它允许我们在不断写入数据的同时将数据写入文件或其他目标。可写流是流的一种&#xff0c;流是Node.js中的一种抽象概念&#xff0c;表示一个数据流的生成器。可写流…...

宁波网站建设哪家公司好/下载百度极速版

一、准备工作&#xff1a;1.U盘一个( 硬盘安装可以忽略此项)二、操作步骤&#xff1a;硬盘安装&#xff1a;1.直接运行通用PE工具箱&#xff0c;安装到当前系统中。2.安装完成后手动重启计算机。3.重启进入选择菜单界面&#xff0c;选择【01】进入WINPE安装XP系统&#xff0c;如…...

佛山企业网站建设平台/推广方式和推广渠道

今天领导让小王将资料以邮件的形式发送给客户&#xff0c;小王一口答应下来&#xff0c;本来以为是非常简单的事情&#xff0c;但小王却犯了难。资料大小1个多G&#xff0c;而小王的普通邮箱可以添加的附件大小也才50M&#xff0c;分开发肯定是不好的。于是我就教她开通TOMVIP邮…...

外贸网站怎么做推广/网络销售管理条例

佳能LBP2900打印机驱动是Canon佳能LBP2900 激光打印机的驱动程序。佳能LBP2900打印机驱动可以有效的解决佳能lbp2900打印机无法打印的问题&#xff0c;可以让你快速简便的打印所需要的文件&#xff0c;功能实用&#xff0c;操作简单&#xff0c;有需要的小伙伴可以来华军软件园…...

金坛网站建设哪家好/个人网站设计

关于推送的集成请参考这篇文章&#xff0c;本篇文章将引导你集成统计功能&#xff0c;只需要简单的三个步骤就可以集成统计功能。第一步 安装在你的项目路径下执行命令&#xff1a;npm install janalytics-react-native --savenpm install jcore-react-native --savereact-nati…...

游戏网站的导航条怎么做的/营销推广活动策划方案大全

本文译自PCL官网教程,原文链接如下 Implicit Shape Model 隐式形状模型 在这个教程中我们将学习如何使用在 pcl::ism::ImplicitShapeModel 类中实现的隐式形状模型算法.这个算法在Jan Knopp, Mukta Prasad, Geert Willems, Radu Timofte, and Luc Van Gool撰写的文章”Hough…...