- 响应式重构。性能提升了,内存使用率下降了(56%),使用方面没有变化。
- 响应式 props 解构
- 新增 useTemplateRef 函数
- 新增 useId 函数
1、props 解构,在之前,我们从 props 中解构出来的是不具备响应式的,需要具备响应式解构需要用到 toRefs 方法包装 props进行解构,而3.5之后,就无需 toRefs 包装了。
// 父组件
<template>
<div class="content">
<el-input v-model="value" style="width: 300px" />
<Child :data="value" />
</div>
</template>
<script setup>
import { ref, onMounted } from "vue";
import Child from "./components/Child.vue";
const value = ref("monkey");
</script>
// 子组件
<template>
<div>
child值:
<span style="color: red">{{ data }}</span>
</div>
</template>
<script setup>
import { watchEffect } from "vue";
const { data } = defineProps(["data"]); // 仍具备响应式
watchEffect(() => {
console.log("data", data);
});
</script>
2、 useTemplateRef 函数,在之前,我们获取 dom 节点需要给 dom 绑定上一个ref=‘refKey’, 然后再用一个ref定义一个空的响应式属性赋值给这个refKey。 如下所示
<template>
<div class="content" ref='myNode'>dom</div>
</template>
<script setup>
import { ref, onMounted } from "vue";
import Child from "./components/Child.vue";
const value = ref("monkey");
const myNode = ref(null)
onMounted(()=>{
console.log(myNode) // 拿到 dom 节点
})
</script>
而现在,有了 useTemplateRef 函数,我们可以更好的区分响应式属性和 dom 节点,不像之前响应式属性和dom节点都是通过ref定义和获取。
useTemplateRef 用法如下
<template>
<span style="color: red" ref="myNode">是我</span>
</template>
<script setup>
import { useTemplateRef } from "vue";
const node = useTemplateRef("myNode"); // 这里定义的接收dom节点的变量无需和ref一样,随便定义接收
onMounted(()=>{
console.log(node) // 拿到 dom 节点
})
</script>
3、 useId函数,目的是为每一个 vue 文件创建一个唯一的id,并保证在服务器和客户端渲染中保持稳定,可用于生成表单元素和可访问性属性的 ID,如下所示
<template>
<label :for="id">点我也能聚焦</label>
<!-- vue3.4同名简写 -->
<input :id type="text" placeholder="Enter text here">
</template>
<script setup>
import { useId } from "vue";
const id = useId();
console.log(id) // v:0
</script>
有关 3.5 中的更改和功能的完整列表,请查看GitHub 上的完整更改日志。
李枭龙2025-01-13 15:23
AI生成文章:请以上所有知识进行深入分析,确定主要知识点,为每个知识点撰写详细说明并附上具有代表性且带有清晰注释的代码示例,接着根据内容拟定一个准确反映文档核心的标题,最后严格按照 Markdown 格式进行排版,确保文档规范美观,以满足初学者学习使用的需求。
李枭龙2024-09-05 22:04
X Lucas