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

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.其他

记得看这个 

 

 完结撒花

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • React中实现antd自定义图标,鼠标悬浮变色
  • RecyclerView网格布局如何动态设置item的显示个数
  • 【虚拟化】使用packer手搓安装linux,windows镜像并导入virsh进行管理(含Kickstart安装与linux内核参数配置)
  • SqlHelper 使用EF-Core框架 连接池处理并发
  • 数字化转型升级探索(二)
  • 算法中常用的排序
  • TMPDIR在pip|pip3 install时的作用以及tmp只有noexec权限的解决方法
  • Java笔试面试题AI答之面向对象(8)
  • C++(Qt)-GIS开发-QGraphicsView显示在线瓦片地图
  • 基于asp.net的在线考试系统源码分享
  • 【网络】网络层协议-IP协议
  • 代码随想录算法训练营第四十天| 647. 回文子串 516.最长回文子序列
  • 代码随想录算法训练营四十五天|115.不同的子序列、583.两个字符串的删除操作、72.编辑距离
  • Qt QT中QString 类的使用--获取指定字符位置、截取子字符串等
  • MobaXterm连接服务器
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • angular学习第一篇-----环境搭建
  • CentOS6 编译安装 redis-3.2.3
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Flex布局到底解决了什么问题
  • passportjs 源码分析
  • vue-router的history模式发布配置
  • vue中实现单选
  • Web Storage相关
  • Zsh 开发指南(第十四篇 文件读写)
  • 从输入URL到页面加载发生了什么
  • 回顾2016
  • 将回调地狱按在地上摩擦的Promise
  • 目录与文件属性:编写ls
  • 前端攻城师
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前嗅ForeSpider采集配置界面介绍
  • 全栈开发——Linux
  • 使用parted解决大于2T的磁盘分区
  • 项目实战-Api的解决方案
  • 一天一个设计模式之JS实现——适配器模式
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • NLPIR智能语义技术让大数据挖掘更简单
  • # 安徽锐锋科技IDMS系统简介
  • # 透过事物看本质的能力怎么培养?
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (七)glDrawArry绘制
  • (转)大型网站架构演变和知识体系
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • /etc/fstab和/etc/mtab的区别
  • @antv/g6 业务场景:流程图
  • @ConfigurationProperties注解对数据的自动封装
  • @Responsebody与@RequestBody
  • @staticmethod和@classmethod的作用与区别
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞