vue知识点(1)

news/2025/3/10 22:22:12/

refreactive的区别

ref

用途:用于创建一个响应式的基本类型(string、number、boolean)或者引用类型(object、array)的数据。
返回值:返回一个带有.value属性的对象,访问或者修改数据时需要通过.value进行。
使用场景:适合处理单个值或需要明确访问.value的场景。

reactive

用途:用于创建一个响应式的对象或者数组。
返回值:返回一个响应式的Proxy对象,可以直接访问或修改属性,无需.value
使用场景:适合处理复杂对象或者嵌套数据结构。

注意:在一个对象或者数组中,如果想要访问更深层的属性或者元素,推荐使用reactive
使用reactive只需要通过obj.a.b.carr[0].name的方式访问深层属性或元素,不需要额外的.value
使用ref则需要通过obj.value.a.b.carr[0].value.name的方式访问深层属性或元素

计算属性

计算属性是通过 computed 函数创建的。
计算属性默认是只读的,但可以通过定义 getset 函数来创建一个可写的计算属性。
get 用于获取计算属性的值。 set 用于设置计算属性的值。

<template><div><h1>{{ alwaysSmall }}</h1>//这时+1不是改变alwaysSmall的值,只是显示时alwaysSmall的值+1<h1>{{ alwaysSmall + 1 }}</h1></div>
</template>
<script setup>
import { ref, computed } from 'vue'
import { onMounted } from 'vue'const count = ref(2)const alwaysSmall = computed({//get(previous):获取当前值的方法。get(previous) {console.log('previous', previous)// 这个计算属性在 count 的值小于或等于 3 时,将返回 count 的值。// 当 count 的值大于等于 4 时,将会返回满足我们条件的最后一个值// 直到 count 的值再次小于或等于 3 为止。if (count.value <= 3) {return count.value}return previous},//set(newValue):设置当前值的方法。当外部尝试修改alwaysSmall的值时,此方法会被调用。它将count设置为新值的两倍。set(newValue) {console.log('newValue', newValue)count.value = newValue * 2},
})onMounted(() => {console.log(alwaysSmall.value)//在外部修改alwaysSmall的值alwaysSmall.value = 10
})
</script>

注意: 计算属性值会基于其响应式依赖被缓存。一个计算属性仅会在其响应式依赖更新时才重新计算。

v-ifv-show

v-if

条件性地添加或移除 DOM 元素

v-show

通过 CSSdisplay 控制显示和隐藏(display: none),元素始终会被渲染到 DOM

注意:当 v-ifv-for 同时存在于一个元素上的时候,v-if 会首先被执行。

事件修饰符

在处理事件时调用 event.preventDefault()event.stopPropagation() 是很常见的。
event.preventDefault()event.stopPropagation() 是用于控制事件行为的两个重要方法。它们在处理 DOM 事件时非常有用,尤其是在需要阻止默认行为或阻止事件冒泡的场景中。
事件修饰符是用 . 表示的指令后缀。
常用的事件修饰符:
.stop:阻止事件冒泡。

<template><div @click="parentClick">//点击按钮时,只会触发 childClick,不会触发 parentClick。<button @click.stop="childClick">点击我</button></div>
</template>

.prevent:阻止默认行为。

<template>//在表单提交时,浏览器的默认行为是刷新页面。//使用 .prevent 修饰符来阻止默认行为,在表单提交时不刷新页面。<form @submit.prevent="onSubmit"><input type="text" v-model="name" /><button>提交</button></form>
</template><script setup lang="ts">
import { ref } from 'vue'
const name = ref('')
const onSubmit = () => {console.log('表单提交,但不刷新页面')
}
</script>

.self:只有当事件是从当前元素触发时才会调用事件处理函数。

<template>//一般情况下点击子元素会冒泡触发父元素上的事件  //使用.self后,点击按钮时,只会触发 childClick。//使用.self后,点击父元素时,才会触发 parentClick。<div @click.self="parentClick"><button @click="childClick">点击我</button></div>
</template><script setup>
const parentClick = () => {console.log('父元素点击')
}
const childClick = () => {console.log('子元素点击')
}
</script>

.capture:使用捕获模式监听事件。默认情况下,事件是从内向外冒泡的,使用 .capture 后,事件会从外向内捕获。

<template>//点击按钮时,先触发 parentClick,再触发 childClick。<div @click.capture="parentClick"><button @click="childClick">点击我</button></div>
</template><script setup>
const parentClick = () => {console.log('父元素点击')
}
const childClick = () => {console.log('子元素点击')
}
</script>

.once:事件只会触发一次。

<template>//点击事件最多被触发一次 onClick 方法<button @click.once="onClick">点击我</button>
</template><script setup>
const onClick = () => {console.log('点击事件只触发一次')
}
</script>

.passive:提升滚动事件的性能,告诉浏览器不要阻止事件的默认行为。一般用于触摸事件的监听器,可以用来改善移动端设备的滚屏性能

<template>//滚动事件的默认行为 (scrolling) 将立即发生而非等待 `onScroll` 完成<div @scroll.passive="onScroll" style="height: 200px; overflow: auto"><div style="height: 1000px">滚动我</div></div>
</template><script>
const onScroll = () => {console.log('滚动中')
}
</script>

按键修饰符

.enter

监听回车键。

<template><input @keyup.enter="onEnter" placeholder="按下回车">
</template><script setup lang="ts">
const onEnter = () => {console.log('按下回车')
}
</script>

.esc

监听 Esc 键。

<template><input @keyup.esc="onEsc" placeholder="按下 Esc">
</template><script setup>
const onEsc = () => {console.log('按下 Esc')
}
</script>

其他常用按键修饰符:
.tab.delete.space.up.down.left.right

系统按键修饰符

.ctrl

监听 Ctrl 键。

<template><button @click.ctrl="onCtrlClick">按住 Ctrl 点击我</button>
</template><script setup>
const onCtrlClick = () => {console.log('按住 Ctrl 点击')
}
</script>

.alt

监听 Alt 键。

<template>// Alt + Enter,修饰语可以使用链式书写<input @keyup.alt.enter="clear" />
</template><script setup>
const clear = () => {console.log('Alt + Enter')
}
</script>

注意:使用链式书写修饰符时需要注意调用顺序,因为相关代码是以相同的顺序生成的。

其他系统修饰键:
.shift.meta(Windows 上是 Win 键,Mac 上是 Command 键)


http://www.ppmy.cn/news/1578191.html

相关文章

AI 智能:开拓未知疆域的科技先锋

在当今科技迅猛发展的浪潮中&#xff0c;AI 智能无疑是最耀眼的弄潮儿&#xff0c;持续重塑着我们生活与工作的方方面面。然而&#xff0c;在这片广袤的技术海洋里&#xff0c;还有诸多潜藏在深处、尚未被广泛挖掘与讨论的领域&#xff0c;它们代表着 AI 智能未来发展的新方向&…

Qt6.8.2创建WebAssmebly项目使用FFmpeg资源

Qt6新出了WebAssmebly功能&#xff0c;可以将C写的软件到浏览器中运行&#xff0c;最近一段时间正在研究这方便内容&#xff0c;普通的控件响应都能实现&#xff0c;今天主要为大家分享如何将FFmpeg中的功能应用到浏览器中。 开发环境&#xff1a;window11&#xff0c;Qt6.8.2…

Redis 缓存穿透、击穿、雪崩的 出现场景 与 解决方案

一、缓存穿透&#xff08;Cache Penetration&#xff09; 问题描述 请求 数据库中不存在的数据&#xff08;如非法ID&#xff09;&#xff0c;导致请求绕过缓存直接击穿到数据库。 典型场景&#xff1a; 恶意攻击&#xff1a;频繁请求 id-1 或随机不存在的用户ID。 业务逻辑…

避免魔法值和多层if的关键:编程范式和设计模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、案例分析二、技术手段函数式接口在枚举中 三、优化后完整代码总结 前言 提示&#xff1a;避免魔法值和多层if的关键&#xff1a;编程范式和设计模式&#…

爬虫案例十一js逆向数位观察网

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 爬虫案例十一js逆向数位观察网 提示&#xff1a;以下是本篇…

【音视频】ffmpeg音视频处理基本流程

一、ffmpeg音视频处理基本流程 首先先看两条命令 ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 1280x720 2.flv ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 -s 1280x720 3.mkv-i :表示输入源&#xff0c;这里是1.mp4&#xff0c;是当前路径下的视频文件-acodec copy…

springboot项目中一个类的构造方法什么时候调用

在 Spring Boot 中&#xff0c;如果一个类没有默认的无参构造方法&#xff0c;但定义了一个带参数的构造方法&#xff0c;Spring 会自动调用这个带参数的构造方法来完成依赖注入。这是 Spring 的构造器注入机制的一部分。 对于 public HelloworldController(ChatClient.Builde…

20250307确认荣品PRO-RK3566开发板在Android13下的以太网络共享功能

20250307确认荣品PRO-RK3566开发板在Android13下的以太网络共享功能 2025/3/7 13:56 缘起&#xff1a;我司地面站需要实现“太网络共享功能”功能。电脑PC要像连接WIFI热点一样连接在Android设备/平板电脑上来实现上网功能/数据传输。 Android设备/平板电脑通过4G/WIFI来上网。…