龙空技术网

【Vue 3入门】认识Vue 3前端开发框架,了解Vue3新特性!

云端源想IT培训 355

前言:

现时大家对“css3前端框架”大概比较重视,看官们都需要学习一些“css3前端框架”的相关内容。那么小编同时在网摘上汇集了一些对于“css3前端框架””的相关文章,希望兄弟们能喜欢,同学们快快来学习一下吧!

“这里是云端源想IT,帮你轻松学IT”

嗨~ 今天的你过得还好吗?

零星的变得优秀

也能拼凑出星河

- 2023.07.11 -

Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。

Vue 3是一种流行的JavaScript框架Vue.js的最新版本。它于2020年9月正式发布,并带来了许多新功能和改进。Vue 3的主要目标是提供更好的性能、更好的开发体验和更小的包大小。

前端框架那么多,我们为什么非要学Vue 3呢?今天就来带大家认识一下Vue 3,首先来说说支持大家学习Vue 3的原因。

一、为什么要学习 vue 3Vue是国内最火的前端框架;Vue 3 于 2022 年 2 月 7 日星期一成为新的默认版本;Vue3性能更高,体积更小;Vue3.0在经过一年的迭代后,越来越好用。

目前已支持 vue3 的UI组件库:

element-plus

Element Plus,一套为开发者、设计师和产品经理准备的基于 Vue 3.0 的桌面端组件库。

vant

轻量、可靠的移动端 Vue 组件库。Vant 是有赞前端团队开源的移动端组件库,于 2016 年开源,已持续维护 4 年时间。目前 Vant 已完成了对 Vue 3.0 的适配工作,并发布了 Vant 3.0 版本。

ant-design-vue (PC组件库)

ant-design-vue 是 Ant Design 的 Vue 实现,组件的风格与 Ant Design 保持同步。

接下来给大家分享Vue3 动机和新特性,敲黑板!这也是面试中经常会遇到的问题哦,要认真看哦。

二、Vue3 动机和新特性

动机与目的:

更好的逻辑复用与代码组织 (composition组合式api);

optionsAPI(旧) => compositionAPI(新),效果: 代码组织更方便了,逻辑复用更方便了非常利于维护!

更好的类型推导 (typescript支持)

vue3 源码用 ts 重写了, vue3 对 ts 的支持更友好了 (ts 可以让代码更加稳定,类型检测 )。

vue3新特性:

数据响应式原理重新实现 (ES6 proxy 替代了 ES5 的 Object.defineProperty)

解决了: 例如数组的更新检测等bug, 大大优化了响应式监听的性能 ---覆写。(原来检测对象属性的变化, 需要一个个对属性递归监听) proxy 可以直接对整个对象劫持。

虚拟DOM - 新算法 (更快 更小);提供了composition api, 可以更好的逻辑复用;模板可以有多个根元素;源码用 typescript 重写, 有更好的类型推导 (类型检测更为严格, 更稳定);废弃了 eventbus 过滤器...

三、Vue 3的新特性

Vue 3 包含了许多新功能和改进。以下是一些值得关注的新特性:

Composition API

使用选项式 (option)API,我们可以用包含多个选项的对象来描述组件的逻辑,例如 data、methods和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例。

<template>

<button @click="increment">Count is: {{ count }}</button>

</template>

<script>

export default {

// data() 返回的属性将会成为响应式的状态

// 并且暴露在 `this` 上

data() {

return {

count: 0

}

},

// methods 是一些用来更改状态与触发更新的函数

// 它们可以在模板中作为事件监听器绑定

methods: {

increment() {

this.count++

}

},

// 生命周期钩子会在组件生命周期的各个不同阶段被调用

// 例如这个函数就会在组件挂载完成后被调用

mounted() {

console.log(`The initial count is ${this.count}.`)

}

}

</script>

通过组合式(Composition) API,我们可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与 <script setup> 搭配使用。

这个setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。比如,<script setup> 中的导入和顶层变量/函数都能够在模板中直接使用。

下面是使用了组合式 API 与 <script setup> 改造后和上面的模板完全一样的组件:

<template>

<button @click="increment">Count is: {{ count }}</button>

</template>

<script setup>

import { ref, onMounted } from 'vue'

// 响应式状态

const count = ref(0)

// 用来修改状态、触发更新的函数

function increment() {

count.value++

}

// 生命周期钩子

onMounted(() => {

console.log(`The initial count is ${count.value}.`)

})

</script>

Teleport

Teleport 是 Vue 3 中的另一个新功能,它允许您在应用程序中移动 DOM 元素,而无需破坏组件的层次结构。可以让开发者将组件渲染到指定的目标中,这对于创建具有复杂动画效果的应用程序非常有用。

下面是一个Teleport的具体示例:

<button @click="open = true">Open Modal</button>

<Teleport to="body">

<div v-if="open">

<p>Hello from the modal!</p>

<button @click="open = false">Close</button>

</div>

</Teleport>

<Teleport> 接收一个 to prop 来指定传送的目标。to 的值可以是一个 CSS 选择器字符串,也可以是一个 DOM 元素对象。这段代码的作用就是告诉 Vue“把以下模板片段传送到 body 标签下”。

Fragments

Vue 3 引入了 Fragments,这使得开发者可以在不添加额外 DOM 元素的情况下渲染多个根元素。

vue2中模板里只允许存在一个根元素,写多个根元素会报错。

<template>

<div><div>

</template>

vue3以后模板中可以存在多个根元素。

<template>

<div><div>

<div><div>

<div><div>

</template>

全局 API 重命名

Vue 3 中,许多全局 API 的名称被重命名,以下是一些需要注意的。

过滤器被移除:在 Vue 3 中,过滤器已经被移除了,我们需要使用计算属性或方法来替代它们。全局 API 被重命名:Vue 3 中一些全局 API 已经被重命名了,例如 Vue.filter 变成了 Vue.app.filter,Vue.directive 变成了 Vue.app.directive 等等。自定义指令 API 发生变化:在 Vue 3 中,自定义指令的 API 发生了变化,我们需要使用 created 和 beforeUnmount 代替 bind 和 unbind。另外,update 方法也被移除了,我们需要使用 beforeUpdate 和 updated 代替它。

更好的 Tree-Shaking 支持

Vue 3 中,更好的 Tree-Shaking 支持提高了应用程序的性能,它允许我们只导入应用程序中实际使用的代码,而不是导入整个库。

要实现更好的 Tree-Shaking,我们需要使用模块化的构建方式,例如使用 ES 模块或 CommonJS 模块。这将允许编译器在构建时进行优化,从而减少应用程序的包大小。

以下是一个示例代码:

import { createApp } from 'vue'

import App from './App.vue'

import { createStore } from 'vuex'

import { createRouter, createWebHistory } from 'vue-router'

const store = createStore({

state: {

count: 0

}

})

const router = createRouter({

history: createWebHistory(),

routes: [

{ path: '/', component: Home },

{ path: '/about', component: About }

]

})

const app = createApp(App)

app.use(store)

app.use(router)

app.mount('#app')

在这个例子中,我们只导入了实际使用的 createApp、createStore 和 createRouter 函数,而没有导入整个 vue 和 vue-router 库。这将使编译器能够在构建时更好地优化我们的应用程序,减少包大小和提高性能。

性能优化

Vue 3 进行了大量的性能优化,包括更快的渲染速度、更小的包大小和更少的运行时错误。这使得 Vue 3 成为了一个更快、更可靠的框架。以下是一些性能优化的具体内容:

使用 Proxy 替代 Object.defineProperty,提高响应式系统的性能;重构虚拟 DOM,减少了创建和比较虚拟 DOM 的开销;优化组件实例初始化过程,减少了内存分配和初始化的开销;优化编译器,减少了编译和渲染的开销;改进 Tree-Shaking 支持,减少了打包后的文件大小。

新的组件钩子

Vue 3 中的组件钩子有一些变化。以下是一些新的组件钩子:

onBeforeMount:在组件挂载之前调用。这个钩子在 Vue 2 中被称为 beforeMount。onMounted:在组件挂载之后调用。这个钩子在 Vue 2 中被称为 mounted。onBeforeUpdate:在组件更新之前调用。这个钩子在 Vue 2 中被称为 beforeUpdate。onUpdated:在组件更新之后调用。这个钩子在 Vue 2 中被称为 updated。onBeforeUnmount:在组件卸载之前调用。这个钩子在 Vue 2 中被称为beforeDestroy。onUnmounted:在组件卸载之后调用。这个钩子在 Vue 2 中被称为 destroyed。

以下是一个示例代码,演示了如何使用新的组件钩子:

<template>

<div>

{{ message }}

</div>

</template>

<script setup>

import { ref, onMounted, onUnmounted } from 'vue'

const message = ref('Hello, world!')

onMounted(() => {

console.log('Component mounted')

})

onUnmounted(() => {

console.log('Component unmounted')

})

</script>

在这个例子中,我们使用了 onMounted 和 onUnmounted 钩子来处理组件的生命周期。在组件挂载时,onMounted 钩子会被调用,我们可以在这里执行一些初始化操作。在组件卸载时,onUnmounted 钩子会被调用,我们可以在这里清理一些资源。

TypeScript 支持

Vue 3 提供了对 TypeScript 的原生支持,这意味着我们可以使用 TypeScript 来编写 Vue 应用程序。在使用 TypeScript 时,我们需要为 Vue 3 安装相应的 TypeScript 类型。

如果你使用的是 Vue CLI 创建的项目,那么这些类型已经自动安装了。如果你使用的是其他方式创建的项目,则可以使用以下命令安装它们:

npm install --save-dev @types/vue

安装完成后,我们可以在 Vue 3 中使用 TypeScript,例如:

<template>

<div>

{{ message }}

</div>

</template>

<script setup>

import { ref } from 'vue'

let message: string = ref('hello word')

</script>

响应式系统和模板编译器的改进

在Vue.js 3版本中,响应式系统采用了Proxy 替代了 Object.defineProperty,提高了性能和可维护性。同时,Vue.js 3版本的响应式系统也支持了嵌套对象和数组的深层监听。

Vue.js 3版本的模板编译器也进行了改进,支持了更多的特性和指令,如 v-model 的多个参数、v-bind 的缩写语法、v-for 的模板片段等。此外,Vue.js 3版本的模板编译器还支持了标记和片段的缓存,提高了性能。

Vue 3 是一个强大的前端框架,它包含了许多新功能和改进。这边文章介绍了为什么要学Vue 3 以及一些值得关注的新功能。希望这篇文章能够帮助您快速入门 Vue 3,开始构建交互式的用户界面。

我们下期再见!

END

文案编辑|云端学长

文案配图|云端学长

内容由:云端源想分享

标签: #css3前端框架