Vue 3 开发顶级技巧





5.00/5 (1投票)
Vue 3 带来了一些新功能。在本文中,我们将探讨其中一些功能,并了解如何使用它们来增强您的开发工作流程。
Vue 于 2013 年首次发布,是一个用于构建 Web 用户界面的渐进式框架。它是一个可采纳的、非整体式的框架,可以与其他框架(如 React 和 Angular)集成。虽然 Vue 只专注于视图层,但它可以轻松驱动单页应用程序 (SPA)。这个完全开源的项目维护在它的 GitHub 页面上。
2020 年 9 月发布的 Vue 3 完全版为开发者带来了显著的改进。Vue 3 与 Vue 2 完全向后兼容。它提高了性能,增强了可读性,并增加了一些新功能。
今天,我们将探讨其中一些功能,并了解如何使用它们来增强您的开发工作流程。我们还将回顾在使用这些功能于早期 Vue 版本时需要的一些变通方法,并探索 GrapeCity 的 Vue 产品。这些产品包括 SpreadJS,一个无依赖的 JavaScript 电子表格解决方案,以及 Wijmo,一个包含 100 多个 JavaScript UI 组件的动态集合。我们还将介绍 TypeScript 支持、Teleport 和 Fragments。
TypeScript 支持
Vue 3 最令人兴奋的方面之一是它本身是用 TypeScript (TS) 编写的,并提供完全支持。原生 TS 支持的优点在于我们无需使用任何额外的工具。此外,随着应用程序的增长,它有助于避免许多潜在的运行时错误。
以前,Vue 2 仅为 TS 提供了官方类型声明。开发者需要使用 npm 安装 TS 并使用其他插件来避免错误。这通常需要复杂且迂回的方法才能在 Vue 2 应用中使用 TS。Vue 3 的 API 对 TS 和 JavaScript 来说是相同的,这意味着在 Vue 3 中,我们对两个平台都能获得同等水平的原生支持。
让我们快速了解一下如何使用 TS 在 Vue 3 中定义一个 Vue 组件。
import { defineComponent } from 'vue'
const Component = defineComponent({
// type inference enabled
})
这里的示例导入了 `defineComponent`,以便 TS 可以正确地推断 Vue 组件内的类型。如果我们想使用 单文件组件,我们必须在代码周围包含以下标签
<script lang="ts"></script>
Vue 3 在所有 Vue 项目中都提供了简单易用的 TS 访问方式。Vue 3 中的完整 TS 支持为开发者提供了更大的灵活性。与早期版本的 Vue 相比,它的可访问性大大提高。
Teleport
Teleport 是 Vue 3 的一项令人兴奋的新功能。在 Vue 2 中,这被称为 portals,需要插件和额外的工具。
Vue 鼓励开发者创建用户界面 (UI) 系统,这些系统同时包含 UI 和组件内的相关行为。然后,这些组件可以以树状结构相互嵌套。虽然这是构建 UI 的好方法,但在许多情况下,从技术角度来看,我们希望组件的一部分存在于文档对象模型 (DOM) 的其他位置。Vue 3 中的 Teleport 允许我们将模板的一部分(例如模态框)放置在不同的组件中,而无需大量的 CSS 或组合更改。这段代码来自 Vue 文档,可以帮助我们说明这一变化。
让我们看一下以下 HTML 结构
<body>
<div style="position: relative;">
<h3>Tooltips with Vue 3 Teleport</h3>
<div>
<modal-button></modal-button>
</div>
</div>
</body>
这段 HTML 创建了一个包含常见模态按钮的基本页面。目前,模态框继承了父 `div` 标签的 CSS 属性。在 Vue 2 中,为了让模态框继承 `body` 标签的属性,我们需要使用 portal 插件或创建一些混乱且易错的 CSS。然而,在 Vue 3 中,我们使用新的 teleport 功能将模态按钮发送到 `body`。我们这样做,而无需将其从 DOM 中的原始位置移除。
以下代码比 Vue 2 的工具实现了这一目标,而且更简单
app.component('modal-button',{
template: `
<button @click="modalOpen = true">
Open full screen modal! (With teleport!)
</button>
<teleport to="body">
<div v-if="modalOpen" class="modal">
<div>
I'm a teleported modal!
(My parent is "body")
<button @click="modalOpen = false">
Close
</button>
</div>
</div>
</teleport>
`,
data() {
return {
modalOpen: false
}
}
})
只需使用 `<teleport to="body">
` 即可将 `body` 标签的 CSS 属性应用于创建的模态框,非常简单。在此示例中,我们在页面上为按钮创建了一个空间,但模态框本身功能齐全,可作为全屏模态框。
Teleport 是 Vue 3 的一个受欢迎的补充。它是减少混乱和提高项目可读性的绝佳工具。
Fragments
Vue 3 还支持 Fragments 或多根节点组件。在 Vue 2 中,每个组件只能有一个根节点。也没有插件支持来创建多根节点。
请注意,Fragments 要求开发者在需要时定义非 prop 属性。非 prop 属性是传递给组件但使用时需要进一步定义的属性或事件监听器。
在 Vue 2 中,我们经常不得不将组件创建在单个 `div` 标签内。这种做法导致了对其所属模板和方式的混淆。在 Vue 3 中,Fragments 看起来是这样的
<template>
<header>...</header>
<main v-bind="$attrs">...</main>
<footer>...</footer>
</template>
在此示例中,我们可以看到我们只需要创建一个模板,然后就可以轻松地创建多个节点,而无需 `div` 标签。`<main>
` 标签包含了一个非 prop 属性绑定的示例,这在 Vue 3 中使用 Fragments 时有时是必需的。
Fragments 非常有助于减少 DOM 混淆并创建更整洁的代码。
结论
与之前的框架版本相比,Vue 3 提供了更大的灵活性和更好的性能。虽然新版本带来了许多新功能,但我们今天探讨的三个功能对开发者来说是最有益的,可以增强开发工作流程。
Vue 3 还与 Vue 2 代码向后兼容,这意味着没有人需要完全重写他们的系统来利用新功能。Vue 是完全开源的,纯粹在 GitHub 上维护。考虑 加入该项目。
如果您正在寻找使用 Vue 3 及其今天介绍的功能的方法,但不知道从哪里开始,可以看看 GrapeCity 的一些产品。这些组件可以无缝地集成到您的 Vue 应用程序中,提供强大的增强功能。
例如,SpreadJS 是一个 JavaScript 电子表格解决方案,在 Vue 中运行得非常好。开发者可以使用 Vue 和 SpreadJS 轻松创建自定义的、功能丰富的电子表格、仪表板、报告等等。
或者,您可以体验 Wijmo,这是一个 UI 组件集合,也适用于 React 和 Angular。Wijmo 与 SpreadJS 类似,拥有大量有用的功能,例如能够在 Vue 中创建灵活的图表和数据网格。Wijmo 非常轻量级,不会给您的项目带来巨大的负担。它让开发者在使用 Vue 3 时拥有更多的自由。