Vue3其他Api

1.shallowRef与shallowReactive

<template><div class="app"><h2>求和为:{{ sum }}</h2><h2>名字为:{{ person.name }}</h2><h2>年龄为:{{ person.age }}</h2><button @click="sum += 1">sum+1</button><button @click="updateName">修改名字u</button><button @click="updateAge">修改年龄</button><button @click="update">修改整个人</button><hr /><h2>汽车名称:{{ car }}</h2><button @click="updateCarName">修改起床名字</button><button @click="updateCarColor">修改颜色</button><button @click="updateCar">修改整个车</button></div>
</template><script setup lang="ts" name="App">
import { ref, reactive, shallowRef, shallowReactive } from "vue";let sum = shallowRef(0); //浅层次变成响应式 等号改变的才有响应式
let person = shallowRef({name: "张三",age: 18,
});
let car = shallowReactive({//只有第一层有效果,深层次无响应式name: "宝马",options: {color: "红色",engine: "V8",},
});
function update() {person.value = { name: "王五", age: 20 };
}
function updateName() {person.value = { name: "王五", age: person.value.age };
}
function updateAge() {person.value = { name: person.value.name, age: 13 };
}function updateCar() {}
function updateCarName() {car.name = "奔驰";
}
function updateCarColor() {car.options.color = "red";
}
</script><style>
.app {background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;
}
button {margin: 0 10px;
}
</style>

 2.readonly与shallowReadonly

 

<template><div class="app"><h2>当前求和为:{{ sum }}</h2><h2>当前求和为:{{ sum2 }}</h2><button @click="changeSum">点我加一</button><button @click="changeSum2">点我加一</button></div>
</template><script setup lang="ts" name="App">
import { ref, readonly,shallowReadonly } from "vue";
let sum = ref(0);let sum2 = readonly(sum);//不仅仅能让ref不能改 reactive也不能改
console.log(sum2.value);//0
// shallowReadonly//浅层只读 第一层只读,深层可以改
function changeSum(){sum.value += 1;
}
function changeSum2(){sum2.value += 1;//不允许改的/Cannot assign to 'value' because it is a read-only property.
}</script><style>
.app {background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;
}
button {margin: 0 10px;
}
</style>

3.toRaw与markRaw

 

<template><div class="app"><h2> 姓名:{{ person.name }}</h2><h2> 年龄:{{ person.age }}</h2><button @click="update1">修改响应式</button><button @click="update2">修改普通</button></div>
</template><script setup lang="ts" name="App">
import { ref, reactive,toRaw ,markRaw} from "vue";let person = reactive({name: '张三',age: 18,
})
let p = toRaw(person);//将响应式对象变成普通对象
//markRaw 是一个对象永远变不了响应式
console.log(person);
console.log(p);//可以改,是同一个对象,改了下一次渲染模板页面也会带着它的值function update1(){person.name = '李四';p.age = 20;
}
function update2(){person.name = '王五';p.age = 22;
}</script><style>
.app {background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;
}
button {margin: 0 10px;
}
</style>

 mockjs 是模仿后端的接口

4.自定义Ref  customRef

 

import { customRef } from "vue";export default function(initValue:string,delay:number){//使用Vue提供的默认ref定义
// let msg = ref('你好')//使用Vue提供的customRef定义响应式数据
let timer:any;
//track (跟踪) trigger(触发)
let msg = customRef((track, trigger) => {return {//get 何时调用? --msg 被读取get() {track(); //告诉vue 数据msg很重要,你要对msg进行持续关注, 一旦msg变化,就去更新return initValue;},//set 何时调用 ? --msg 被修改set(value) {clearTimeout(timer);timer = setTimeout(() => {initValue = value;trigger(); //通知vue一下数据msg变化了}, delay);},};
});return {msg}
}
<template><div class="app"><h2>{{ msg }}</h2><input type="text" v-model="msg" /></div>
</template><script setup lang="ts" name="App">import userMsgRef from './userMsgRef';let {msg} = userMsgRef('你好',1000);
</script><style>
.app {background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;
}
button {margin: 0 10px;
}
</style>

5.Vue3新组件

1.Teleport

<template><button @click="isShow = true">展示弹窗</button><!-- #app . html --><teleport to="body"><!-- 传送到body下了 --><div class="model" v-show="isShow"><h2>我是弹窗的标题</h2><p>我是弹窗的内容</p><button @click="isShow = false">关闭弹窗</button></div></teleport>
</template><script setup lang="ts" name="Model">
import { ref } from "vue";
let isShow = ref(false);
</script><style lang="css" scoped>
.model {width: 200px;height: 150px;background-color: skyblue;border-radius: 10px;padding: 5px;box-shadow: 0 0 5px;text-align: center;position: fixed;left: 50%;margin-left: -100px;top: 20px;
}
</style>

 

<template><div class="outer"><h2>我是App组件</h2><img src="https://tse1-mm.cn.bing.net/th/id/OIP-C.Zte3ljd4g6kqrWWyg-8fhAHaEo?w=303&h=189&c=7&r=0&o=5&pid=1.7" alt=""><br><Model/></div>
</template><script setup lang="ts" name="App">import Model from './Model.vue';
</script><style scoped>
.outer {background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;width: 400px;height: 400px;/**饱和度滤镜 */filter: saturate(200%);
}
img {width: 270px;
}
</style>

2.Suspense

UomgAPI - 优启梦免费API数据接口调用服务平台

推荐这个开放Api网站

<template><div class="app"><h2>我是App组件</h2><Suspense><template #default><!-- 异步任务做完的时候出现 --><Child/></template><template #fallback><!-- 异步任务没有做完的时候出现 --><div>加载中...</div></template></Suspense></div>
</template><script setup lang="ts" name="App">
import { Suspense } from 'vue';
import Child from './Child.vue';</script><style scoped>
.app {background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;
}</style>
<template><div class="child"><h2>我是Child组件</h2><h2>当前求和为:{{sum}}</h2></div>
</template><script setup lang="ts" name="">
import { ref } from "vue" 
import axios from "axios";
let sum = ref(0);let {data:{content}} = await axios.get('https://api.uomg.com/api/rand.qinghua')console.log(content);</script><style lang="css" scoped>.child{background-color: skyblue;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;}
</style>

3.全局Api转移到应用对象

Vue3 Api

app.component 定义全局组件 

import {createApp} from 'vue'
import App from './App.vue'
import Hello from './Hello.vue'// 创建应用
const app = createApp(App)app.component('Hello',Hello)//全局变量
app.config.globalProperties.x=99;declare module 'vue'{interface ComponentCustomProperties{x:number}
}
//全局自定义指令 v-beauty
app.directive('beauty',(element,{value})=>{element.innerText +=value;element.style.color='red'element.style.backgroundColor='yellow'
})app.mount('#app')setTimeout(()=>{//卸载app.unmount()
},3000)// 使用插件
// app.use(router)

 4.其他

记得看这个 

 

 完结撒花

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

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

相关文章

深入浅出:模拟实现 C++ STL 中的 unordered_map 和 unordered_set

目录 引言基础知识 散列表哈希函数负载因子模拟实现 unordered_set 数据结构设计哈希函数碰撞解决策略插入操作查找操作删除操作模拟实现 unordered_map 键值对存储插入操作查找操作删除操作代码示例总结 1. 引言 unordered_map 和 unordered_set 是 C 标准模板库 (STL) 中非…

LeetCode: 543. 二叉树的直径

二叉树的直径 原题 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;roo…

Vulnhub:hacksudo search

靶机下载地址。下载完成后&#xff0c;在VirtualBox中导入虚拟机&#xff0c;系统处理器修改为2&#xff0c;网卡配置修改为桥接。 信息收集 主机发现 扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip&#xff1a;192.168.31.218 端口扫描 nmap 192.168…

大数据采集迁移工具

Flume Sqoop kafka框架 MQ&#xff1a;消息队列 broker相当于服务器 消息队列

视频化时代,用好AIGC产品赋能企业培训打造增效降本“最佳实践”

根据IBM的数据&#xff0c;85%的中国企业正在加速投资AI领域&#xff0c;其中超过63%的企业已积极采用生成式AI。德勤的调研进一步显示&#xff0c;近80%的全球受访企业高管认为&#xff0c;生成式AI的兴起与发展将在3年内推动组织和行业发生实质性变革&#xff0c;这也就意味着…

2024爆火全网大模型书籍:《从零构建大型语言模型》星标17.8k

2024爆火全网大模型书籍&#xff1a;《从零构建大型语言模型》星标17.8k 近期&#xff0c;机器学习和 AI 研究员、畅销书《Python 机器学习》作者 Sebastian Raschka 又写了一本新书 ——《Build a Large Language Model (From Scratch)》&#xff0c;旨在讲解从头开始构建大型…

线性代数 -- 矩阵求导

Tips&#xff1a;本文为理解神经网络的前置知识&#xff0c;整体内容并不全&#xff0c;相关内容还需后续进一步完善。 一、基础 1、标量、向量和矩阵 标量&#xff1a;只有大小&#xff0c;没有方向的量 向量&#xff08;欧几里得向量&#xff09;&#xff1a;具有大小和方向…

数仓建模:一文带你读懂什么是数仓建模? | 详聊数据建模的几种形式

目录 1 数据仓库的特点和意义 1.1 数仓特点 1.2 数仓形态演进 1.3 数仓建模的意义 1.4 数仓价值 2 数仓建模流派之争 2.1 Inmon数仓架构 2.2 Kimball数仓架构 2.3 两种建模方式对比分析 3 数仓建模流程 3.1 整体流程 3.2 数仓建模三步调研 3.3 业务流程构建 3.4 领…

MySQL的服务器与客户端:架构解析与实践

文章目录 MySQL的服务器和客户端服务端处理客户端请求连接管理解析与优化查询缓存语法解析查询优化 存储引擎不同的存储引擎查看支持的存储引擎为不同的表设置存储引擎 MySQL是一个广泛使用的开源关系数据库管理系统&#xff0c;其核心架构由服务器端和客户端两大部分组成。本文…

Tableau 社区项目 | 参与 Data+TV 挑战,洞悉全球电视剧集数据的精彩故事!

如果你钟爱某部电视剧集&#xff0c;正苦于没有数据练手&#xff0c;就快来参与 DataTV 挑战吧~ 去年&#xff0c;Tableau 和 IMDb 携手发起 DataMovies 挑战&#xff0c;吸引了全球各地的数据爱好者与影迷参与。今年&#xff0c;TC24 Viz 竞赛也以此为主题&#xff0c;让我们领…

LLM大模型学习路径指南速成,两月学完

大家好&#xff01;整理了一些我的大模型学习路线和参考资料&#xff0c;供初学者入门了解和实践 以下是简化版的学习路线&#xff1a; 第1周&#xff1a;基础知识储备 了解人工智能和大模型的基本概念。 学习线性代数、概率论和统计学的基本知识。 掌握Python编程基础。 第2…

获取响应头Content-Disposition,提取文件名

// 响应头数据&#xff0c;这里使用假数据 const temp "attachement;filename%%%%%%......."// 处理文件名的正则校验let filenameRegex /filename[^;\n]*((["]).*?\2|[^;\n]*)/;let matches filenameRegex.exec(temp);let fileName "批量下载.pdf&qu…

【论文分享】sNPU: Trusted Execution Environments on Integrated NPUs 24‘ISCA

目录 AbstractINTRODUCTIONBACKGROUND AND RELATED WORKTrusted Execution Environment (TEE)Neural Processing Unit (NPU)Integrated NPU v.s. Discrete NPU Multi-tasking Requirements for NPUsLow NPU utilization for a single ML workloadSimultaneous execution of bot…

两行代码开启大模型评测之旅!OpenCompass 工具版本全面更新,快来试试看

作为 OpenCompass 司南大模型评测体系三大核心模块之一的评测工具链体系 CompassKit 近日迎来重大更新&#xff01;​ 本次更新主要集中在 OpenCompass 大语言模型评测工具&#xff0c;主要带来了以下几大新功能&#xff0c;欢迎大家使用&#xff01;​ 基于 pip 的一键安装&a…

分类预测|基于CNN-LSTM-Attention卷积-长短时记忆-注意力数据分类Matlab程序 直接运行程序或替换数据集运行程序

分类预测|基于CNN-LSTM-Attention卷积-长短时记忆-注意力数据分类Matlab程序 直接运行程序或替换数据集运行程序 文章目录 一、基本原理1. 卷积神经网络&#xff08;CNN&#xff09;CNN的基本步骤&#xff1a; 2. 长短期记忆网络&#xff08;LSTM&#xff09;LSTM的基本步骤&am…

屏幕像素初步认识

屏幕分辨率&#xff1a; 屏幕分辨率是指显示器所能显示的像素的总数&#xff0c;通常以水平像素数乘以垂直像素数来表示&#xff0c;例如1920x1080。这个数字越大&#xff0c;屏幕显示的图像就越清晰&#xff0c;细节展现得也更加丰富。 像素&#xff08;Pixel&#xff09;&am…

【Linux】使用Linux实现小程序 - 进度条

目录 一、缓冲区二、回车换行的概念三、进度条的设计3.1 版本1&#xff08;没有配合场景&#xff09;3.2 版本2&#xff08;配合场景&#xff09;3.3 版本3&#xff08;美化进度条&#xff09; 结尾 一、缓冲区 C/C语言&#xff0c;会针对标准输出&#xff0c;给我们提供默认的…

【转变之旅】从程序员到AI绘画艺术家,我的月入过万之路

曾经&#xff0c;我的生活平淡如水&#xff0c;作为一名程序员&#xff0c;每天重复着朝九晚五的工作。然而&#xff0c;一场突如其来的裁员&#xff0c;让我陷入了失业的深渊。为了生活&#xff0c;我选择了开滴滴谋生。没想到&#xff0c;这个看似权宜之计的决定&#xff0c;…

智慧医院必备信息化系统之——LIS系统源码

检验医学是一门临床学科&#xff0c;它运用不断发展的自然科学和医学科学技术对患者血液、尿液和各种体液标本进行检验&#xff0c;并以发展检验技术、提高检验质量为重点&#xff0c;达到对患者疾病的诊断、病情观察和预后判断等目的。为了将医院的整个检验管理完全数字化、信…

机器学习面试:LR和线性回归的区别是什么?

在机器学习和统计学中&#xff0c;逻辑回归&#xff08;Logistic Regression&#xff0c;简称LR&#xff09;和线性回归&#xff08;Linear Regression&#xff09;是两种常用的回归分析方法&#xff0c;它们在目的、输出、应用场景等方面有显著的区别。以下是它们的主要区别&a…