Vue3.5新特性

响应式属性解构

 响应式属性解构已经处于实验状态约一年了,但随着 3.5 版本的发布,它将成为一个稳定特性。这个特性允许你从defineProps宏中解构属性而不会失去响应性。

import { watchEffect } from 'vue'

const { count } = defineProps(['count'])

watchEffect(() => {
  // 每当父组件中的 count 属性发生变化时,这里就会记录
  console.log(count)
})

尤雨溪说:“几乎每一个在实际项目中大规模使用响应式属性解构的开发者都反馈良好。他们表示喜欢这个特性,希望看到这个特性被稳定下来。”

对于那些不想使用这个特性的人,也提供了一个标志来关闭它。

// vite.config.js
export default {
  plugins: [
    vue({
      script: {
        propsDestructure: false
      }
    })
  ]
}

useTemplateRef

<script setup>
// 首先定义一个值为 undefined 或 null 的 ref,并随意命名结果变量
const divEl = ref();
</script>

<template>
<!-- 然后在模板中的某个地方使用与 `ref` 属性值相同的名称
 -->
<div ref="divEl" ></div>
</template>

这种方法存在两个问题:

  1. 有时会令人困惑。divEl是响应式数据还是一个 DOM 元素?如果有命名模板引用的约定,那还不算太差,但最终你还必须查看模板中匹配的ref=才能确定。

  2. 此外,这限制了你只能在组件的 script 里定义模版的 refs。这意味着自定义 composables 想要访问 DOM 元素的话,必须接受一个 template 引用作为参数。

现在有了useTemplateRef,这两个问题都得到了解决。

// MyComposable
export const useMyComposable = (options = {
  templateRef: 'el'
})=>{
  // 由于函数名称的关系,很明显这是一个模板引用👇
  const theEl = useTemplateRef(options.templateRef);
}

 

// MyComponent
<script setup>
// 无需在组件中定义模板引用,这可以是组合函数的工作
useMyComposable()
useMyComposable({ templateRef: 'el2' })
</script>
<template>
<div ref="el"></div>
<div ref="el2"></div>
</template>

useId 

新的useId工具组合函数返回一个在服务器渲染和客户端渲染中都稳定的唯一 ID。和表单元素属性(如forid)以及 accessibility 属性一起使用非常完美。

<!--MyCustomInput-->
<script setup>
defineProps({
  label: String
  help: String
  //...
})

const inputId = uesId();
const helpTextId = useId();
</setup>
<template>

<label :for="inputId">{{label}}</label>
<input :id="inputId" :aria-describedby="helpTextId"/>
<p :id="helpTextId">{{ help }}</p>

</template>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值