Vue 3.2 发布, <script setup> + TS + Volar = 真香

Vue3.2带来了稳定版的<scriptsetup>和<style>v-bind,允许更简洁的SFC编写。新增defineCustomElement方法支持创建原生Web组件,性能得到显著提升,包括更快的ref实现、依赖跟踪优化和内存减少。另外,Vue3.2还引入了EffectScope API和v-memo指令,提供更精细的响应式控制和性能优化。

作者 | 不叫月红   

出品 | 优快云博客

Vue 框架创始人尤雨溪在官博宣布了 Vue 3.2版本,并且在其个人社交账号评价到:

随之有用户在下面抱怨到,学不动了!

哈哈,一群可爱的程序员儿~

而针对用户提到的“如果不想暴露所有变量或方法,是不是只能放弃 setup 语法糖”时,尤雨溪提醒到:“搞清楚暴露到模板和暴露到外部的区别!”

下面我们一起来看看新版本都有哪些期待已久的新特性吧!

Vue 3.2 包括许多重要的新功能和性能改进,就在新版本发布后不久,官方的CHANGELOG上,又增加了一个 Vue 3.2.1更新,只更新了一个bug修复。

图源:优快云付费下载自视觉中国

SFC的两个新成员顺利转正

单文件组件(SFCs,aka .vue files)的两个新功能顺利从实验状态顺利转正成稳定状态,它们分别是:

< script setup >:新的编译语法糖,简而言之就是 script setup 相当于在编译运行时把代码放到了 setup 函数中运行,然后把导出的变量定义到上下文中,并包含在返回的对象中;

<style> v-bind:即在SFC的 <style> 标签里可以绑定一些CSS内联样式。

下面是一起使用这两个功能代码的案例组件:

<script setup>import { ref } from 'vue'const color = ref('red')</script><template>  <button @click="color = color === 'red' ? 'green' : 'red'">    Color is: {{ color }}  </button></template><style scoped>button {  color: v-bind(color);}</style>

感兴趣的同学可以在SFC Playground 中尝试一番,或者阅读官方文档:

  • https://v3.vuejs.org/api/sfc-script-setup.html

  • https://v3.vuejs.org/api/sfc-style.html#state-driven-dynamic-css

此外,Vue官方基于<script setup>还构建了新的RFC,旨在通过编译器改善ref体验,体验反馈地址:https://github.com/vuejs/rfcs/discussions/369

Web 组件

Vue 3.2 引入了一个新的 defineCustomElement 方法,可以使用 Vue 组件 API 轻松创建原生自定义元素:

import { defineCustomElement } from 'vue'const MyVueElement = defineCustomElement({  // normal Vue component options here})// Register the custom element.// After registration, all `<my-vue-element>` tags// on the page will be upgraded.customElements.define('my-vue-element', MyVueElement)

该API允许开发者创建Vue驱动的UI组件库,这些库可以单独使用或者与其他框架同时使用,具体如何使用,大家可以参考官方文档:https://v3.vuejs.org/guide/web-components.html

性能提升

  • 对反应系统进行重大优化,感谢@basvanmeurs的出色表现

  • 更高效的ref实现(约 260% 的读取速度/约 50% 的写入速度)

  •      约 40% 更快的依赖跟踪

  •      内存使用量减少约 17%

  • 模板编译器改进:

  • 创建普通元素 VNode 的速度提升约 200%

  • 更为积极的连续 hoisting

最后,该版本还提供了可实现部分记忆模板树功能的 v-memo 新指令,该指令不但允许 Vue 可以完全跳过新的 VNode 创建步骤,还可以跳过虚拟 DOM 差异。虽然可使用的地方不多,但在特殊情况下可压榨最大性能,例如处理大型 v-for 列表。

使用简单的单行添加,v-meno 使 Vue 成为 js-framework-benchmark 中最快的主流框架:

Vue官博

服务端渲染

该版本的@vue/server-renderer包提供了一个 ES 模块构建,可实现与Node.js内置模块解耦。这样一来,在非Node.js 运行时中(例如CloudFlare Workers 或者 Service Workers)就可以捆绑和使用@vue/server-renderer。

与此同时,该版本还提升了流式渲染API,给 Web Streams API 渲染提供了新方法。查看@vue/server-renderer 文档可获得更多详细信息:https://github.com/vuejs/vue-next/tree/master/packages/server-renderer#streaming-api

Effect Scope API

Vue 3.2 还引入了一个新的 Effect Scope API,可用来直接控制反应性效果(计算和观察者)的处理时间。它可以更轻松地在组件上下文之外使用Vue响应式API,并且解锁组件内部的一些高级用例。

这是一个面向库作者的底层API,感兴趣的同学可以查阅官方RFC了解更详细的内部原理跟案例。

相关链接:

  • Vue 变更日志:https://github.com/vuejs/vue-next/blob/master/CHANGELOG.md

  • Vue 官博发布的版本更新:https://blog.vuejs.org/posts/vue-3.2.html

————————————————

版权声明:本文为优快云博主「不叫月红」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.youkuaiyun.com/mengyidan/article/details/119562143






☞Java 和 Python 并列第二、Julia 下滑,揭晓 RedMonk 最新编程语言榜单!
☞字节回应阿里涉侵犯男员工曾面试并通过一面;HarmonyOS 2.0用户数升至5000万|极客头条
☞世界第三大浏览器正在消亡
<think>嗯,用户现在想了解Vue项目中<script setup>中的setup属性的作用。首先,我需要回忆一下Vue 3中的Composition API,因为<script setup>是与之相关的语法糖。 首先,setup属性是Vue 3.2引入的,用于简化组件的编写。在传统的Composition API中,我们需要在setup函数中返回对象,而使用<script setup>后,代码会更简洁。那它的作用主要有哪几个方面呢? 第一,应该是自动暴露顶级变量和函数。在普通的setup函数里,必须return才能让模板访问到,而使用<script setup>后,声明的变量、函数以及import进来的内容都会自动暴露。这样减少了代码量,特别是对于小型组件来说更方便。 第二,应该是更好的TypeScript支持。因为所有类型都能根据变量声明自动推断,不需要显式定义类型,这对于TS项目来说是个优势,减少了样板代码。 第三,与普通script的比较。相比于普通的<script>标签,<script setup>在编译时会有更多的优化,比如更高效的代码生成,以及更好的IDE支持,比如Volar插件能够提供更好的语法提示和检查。 然后,可能还需要提到它如何简化代码结构,比如不再需要显式导出,组件注册可以通过导入后直接使用,而不需要在components选项中注册。例如,直接import一个组件,然后在模板中使用,不需要components: { MyComponent }。 另外,关于props和emit的定义,在<script setup>中使用defineProps和defineEmits,这些编译器宏会自动处理props和事件的声明,而不需要像之前那样在setup函数中通过参数来解构。 可能还需要举例说明代码对比,比如传统setup函数和<script setup>写法的不同,让用户更直观地看到差异。 然后,用户的问题可能涉及为什么使用setup属性,或者它解决了什么问题。这时候需要解释传统Options API的局限性,以及Composition API带来的更好的逻辑组织方式,而<script setup>进一步简化了这种写法。 可能还要提到响应式系统,比如ref和reactive在<script setup>中的使用方式是否改变,但实际使用方式是一样的,只是不需要return了。 最后,总结一下主要作用:简化代码结构、自动暴露变量、更好的TS支持、编译优化。 然后,根据用户的要求,生成相关问题。比如关于defineProps的使用,响应式变量的处理,和Options API的区别,以及生命周期钩子的使用差异。</think><< `<script setup>` 是 Vue 3.2+ 中用于简化 Composition API 写法的编译时语法糖。它的核心作用是: 1. **自动暴露顶级变量和函数** ```vue <script setup> import { ref } from &#39;vue&#39; const count = ref(0) // 自动暴露给模板,无需手动 return </script> ``` 2. **更简洁的组件注册** ```vue <script setup> import MyComponent from &#39;./MyComponent.vue&#39; // 直接使用,无需 components: { MyComponent } </script> <template> <MyComponent /> </template> ``` 3. **直接使用 `defineProps` 和 `defineEmits`** ```vue <script setup> const props = defineProps({ title: String }) const emit = defineEmits([&#39;submit&#39;]) </script> ``` 4. **更好的 TypeScript 类型推断** 所有声明自动推导类型,无需额外类型注解。 **原理**:`<script setup>` 会被编译为标准的 `<script>` 格式,在编译阶段自动处理变量暴露和上下文绑定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值