Vue3其他Api

news2024/9/22 15:27:08

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.coloradmin.cn/o/2090984.html

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

相关文章

【Docker系列】Docker 日志管理:批量删除策略与实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

剪画:自媒体人都是这么保存无字幕视频素材的!

在数字媒体的精彩世界中&#xff0c;视频如璀璨星辰照亮我们的生活。 无论是教育的启迪、娱乐的放松还是信息的传播&#xff0c;视频都担当着关键角色。 但水印&#xff0c;那以文字或图形形式出现在视频中的印记&#xff0c;虽有声明版权之效&#xff0c;却也常给我们带来困扰…

基于web网上十字绣专营店设计与实现

&#xff08;一&#xff09;业务流程分析 没有实现网上销售的十字绣专营店&#xff0c;即店面销售方式&#xff0c;店面需要专人看管&#xff0c;而且销售范围有限&#xff0c;面向的对象很受限制&#xff0c;销售情况需要店主手工记录到账簿&#xff0c;以备利润汇总&#xf…

脚手架工具的应用(前端和后端搭建)

前端 一、安装 Node.js 环境 使用npm下载镜像 查看镜像&#xff1a;npm config get registry 切换淘宝镜像&#xff1a;npm config set registry https://registry.npmmirror.com 还原镜像&#xff1a;npm config set registry https://registry.npmjs.org 二、使用 Vue.js 脚…

BugKu练习记录:ok

题目&#xff1a; 从特征上看是BrainFuck中的Ook加密&#xff0c;直接用工具解

三天速成数学建模国赛国奖全攻略

这里写目录标题 国赛考点&#x1f5d2;️&#x1f5d2;️01 国赛是如何评奖的&#xff1f;02 国赛历年题型和模型算法1&#xff09;国赛赛题特点2&#xff09;历年国赛赛题类型 建模手三天快速提升计划✨✨01 第一天&#xff1a;模型分类及国赛常见模型的用法了解1&#xff09;…

弹窗相关操作

弹窗使用 文章目录 弹窗使用弹窗-新增表单修改弹窗 弹窗-新增表单 拖拽弹出层组件&#xff0c;补充表单信息 2.点击表单&#xff0c;绑定数据库模型&#xff0c;绑定字段 3.新增弹窗按钮绑定打开或关闭弹出层事件 4.弹窗保存按钮依次绑定 保存表单&#xff0c;打开或关闭弹…

技术风暴中的应急策略:开发团队如何应对突发故障与危机

文章目录 每日一句正能量前言快速响应与问题定位策略建立健全的应急预案和备份机制事后总结与持续改进后记 每日一句正能量 在工作上遇到挫折&#xff0c;于是退缩了&#xff0c;说因为难&#xff1b;在生活上遇到困难难&#xff0c;于是抱怨了&#xff0c;说因为苦&#xff1b…

Docker安装Neo4j图数据库和APOC插件

文章目录 一、前言二、安装Neo4j三、测试Neo4j四、安装APOC插件五、测试APOC插件 一、前言 官方文档&#xff1a;https://neo4j.com/docs/operations-manual/current/docker/introduction/ 二、安装Neo4j 我这里以 5.23.0 版的 Neo4j 为例 拉取镜像 docker pull neo4j:5.23.0…

暴搜、深搜、回溯算法题集

文章目录 1. 全排列2. 全排列II3. 子集4. 子集II5. 找出所有子集的异或总和再求和6. 电话号码的字母组合7. 括号生成8. 组合9. 目标和10. 组合总和11. 组合总和II12. 组合总和III13. 字母大小写全排列14. 优美的排列15. N 皇后16. 有效的数独17. 解数独18. 单词搜索19. 黄金矿工…

Docker 的安全优化

目录 1 Docker安全优化思路 1.1 命名空间隔离的安全 1.2 控制组资源控制的安全 1.3 内核能力机制 1.4 Docker服务端防护 1 Docker安全优化思路 Docker容器的安全性&#xff0c;很大程度上依赖于Linux系统自身 评估Docker的安全性时&#xff0c;主要考虑以下几个方面&#xf…

两步解决yum无法安装软件问题:Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

报错信息&#xff1a; [rootiZwz946ibli8ikuyqgtc58Z ~]# yum install rh-redis5-redis Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org?archx86_64&release7&reposclo-rh …

[vue] jszip html-docx-js file-saver 图片,纯文本 ,打包压缩,下载跨域问题

npm install jszip file-saverimport JSZip from jszip; import FileSaver from file-saver;JSZip 创建JSZip实例&#xff1a; const zip new JSZip();创建文件&#xff1a;支持导出纯文本 zip.file("hello.txt", "Hello World\n");创建文件夹&#xf…

Leetcode3239. 最少翻转次数使二进制矩阵回文 I

Every day a Leetcode 题目来源&#xff1a;3239. 最少翻转次数使二进制矩阵回文 I 解法1&#xff1a;分别统计 先计算所有行变成回文最少需要翻转多少次。 也就是对于每一行 row&#xff0c;计算这一行变成回文最少需要翻转多少次。 也就是累加 row[j]!row[n−1−j] 的个…

Windows 11安装 MinGW-w64 教程

MinGW MinGW&#xff0c;全称“Minimalist GNU for Windows”&#xff0c;是一个提供在Windows操作系统上运行的GNU工具集的软件环境。它允许开发者使用GCC&#xff08;GNU Compiler Collection&#xff09;编译器来编译C和C程序&#xff0c;以及其他GNU工具&#xff0c;如GDB调…

【MySQL】字节跳动MySQL连环40问(网图)

本文首发于 ❄️慕雪的寒舍 字节MySQL连环40问&#xff0c;网图 虽然感觉这玩意和字节跳动没关系&#xff0c;但是管他的&#xff1f;直接开始回答&#xff01; 1.MySQL中有哪几种锁&#xff1f; 会的不全&#xff0c;所以查的GPT MySQL中有多种类型的锁&#xff0c;主要包括以…

【Python篇】Python 类和对象:详细讲解(中篇)

文章目录 Python 类和对象&#xff1a;详细讲解前言9. 方法重写&#xff08;Method Overriding&#xff09;9.1 为什么需要方法重写&#xff1f;9.2 方法重写的基本示例9.3 代码详解 10. 多继承&#xff08;Multiple Inheritance&#xff09;10.1 多继承的概念10.2 多继承的示例…

Springboot 大学生心理健康教育平台---附源码92334

目录 1 绪论 1.1 研究背景 1.2研究现状 1.3论文结构与章节安排 2 大学生心理健康教育平台分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 大学生心理健康教育平台总体设计 3.1 系统功能模块设计 3.2 数据库设计 3.4本章小…

chapter09-OOP高级部分——(接口)——day13

目录 403-接口快速入门 404-接口基本介绍 405-接口应用场景 406-接口使用细节1 407-接口使用细节2​编辑 408-接口课堂练习 409-接口VS继承 410-接口多态特性 411-接口多态传递 412-接口课堂练习 403-接口快速入门 404-接口基本介绍 405-接口应用场景 406-接口使用细节…

unity shader 鼠标传入世界坐标到shader的练习

练习贴 c#代码 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;public class TestInputPosShader : MonoBehaviour {public Material material;const int arrayCount 2000;Vector4[] list new Vector4[a…