【Vue3.xx】基础讲解

本文详细介绍了Vue3.x的新特性,包括性能提升、响应式对象的增强(setup函数、ref、reactive、toRefs和Watchers)、生命周期的变化、Teleport瞬移组件和Suspense异步组件的使用。通过CDN、npm、CLI和Vite等方式安装Vue3,展示了Vue3如何解决Vue2中的难题,提供更好的TypeScript支持,并提供了组件逻辑复用的新方案。
摘要由CSDN通过智能技术生成

Vue3基础

1. Vue3的介绍

Vue设计的初衷就包括可以被渐进式地采用 ,所以Vue3支持2中的大部分特性 (迁移指南)。

Vue3新增特性:
  • 性能

    • 虚拟DOM的重写

    • 打包大小减少( tree shaking)

    • 初次渲染快

    • 内存使用减少(compositionAPI)

  • 新增语法(compositionAPI)

    • ref和reactive

    • computed和watch

    • 新的生命周期函数

    • 自定义函数-Hooks函数(像React Hooks)

  • 其它新赠特性

    • Teleport 瞬移组件
    • Suspense 异步加载组件
    • 全局API的修改和优化
    • Custom renderer
  • 任何的修改都已经移到全局的实例上去

    全局配置

    • Vue.config 改成 app.config

    全局注册类API

    • Vue.component 改为 app.component

    • Vue.directive 改为 app.directive

    行为扩展类API

    • Vue.mixin 改为 app.mixin

    • Vue.use 改为 app.use

  • 更好的Typescript支持

Vue2遇到的难题

Vue2的组件 API 设计所面对的核心问题之一就是如何组织逻辑,以及如何在多个组件之间抽取和复用逻辑。基于 Vue 2 目前的 API 我们有一些常见的逻辑复用模式,但都或多或少存在一些问题。这些模式包括:

  • Mixins
    • 命名冲突
    • 不清楚暴露出来变量的作用
    • 重用到其他component经常会遇到问题
  • 高阶组件 (HOC)
  • Renderless Components (基于 scoped slots / 作用域插槽封装逻辑的组件)

总体来说,以上这些模式存在以下问题:

  • 模版中的数据来源不清晰

    ​ 举例来说,当一个组件中使用了多个 mixin 的时候,光看模版会很难分清一个属性到底是来自哪一个 mixin。HOC 也有类似的问题。

  • 命名空间冲突

    ​ 由不同开发者开发的 mixin 无法保证不会正好用到一样的属性或是方法名。HOC 在注入的 props 中也存在类似问题。

  • 性能

    ​ HOC 和 Renderless Components 都需要额外的组件实例嵌套来封装逻辑,导致无谓的性能开销。

Vue3解决的问题

​ Function-based API 受 React Hooks 的启发,提供了一个全新的逻辑复用方案,且不存在上述问题。使用基于函数的 API,我们可以将相关联的代码抽取到一个 “composition function”(组合函数)中 —— 该函数封装了相关联的逻辑,并将需要暴露给组件的状态以响应式的数据源的方式返回出来。这里是一个用组合函数来封装鼠标位置侦听逻辑的例子:

function useMouse() {
   
  const x = ref(0)
  const y = ref(0)
  const update = e => {
   
    x.value = e.pageX
    y.value = e.pageY
  }
  onMounted(() => {
   
    window.addEventListener('mousemove', update)
  })
  onUnmounted(() => {
   
    window.removeEventListener('mousemove', update)
  })
  return {
    x, y }
}

// 在组件中使用该函数
const Component = {
   
  setup() {
   
    const {
    x, y } = useMouse()
    // 与其它函数配合使用
    const {
    z } = useOtherLogic()
    return {
    x, y, z }
  },
  template: `<div>{
    { x }} {
    { y }} {
    { z }}</div>`
}

从以上例子中可以看到:

  • 暴露给模版的属性来源清晰(从函数返回)
  • 返回值可以被任意重命名,所以不存在命名空间冲突
  • 没有创建额外的组件实例所带来的性能损耗
类型问题:

​ Vue3原本期望Class类解决类型推倒问题,最后依然存在类型问题.最后采用了天然对类型很友好的基于函数的API,因为基于函数API在使用TS或是原生JS时写出来的代码几乎一摸一样

打包尺寸:

​ 基于函数的 API 每一个函数都可以被 ES export 被单独引入,主要这样对tree-shaking很友好

没有使用的API打包的时候会被移除,基于函数API有更好的压缩效率,但是Class的属性和方法名不行

2. 体验Vue3

安装

三种方式:

  1. 在页面上以 CDN 包的形式导入。
  2. 使用 npm 安装它。
  3. 使用官方的 CLI 来构建一个项目,它为现代前端工作流程提供了功能齐备的构建设置 (例如,热重载、保存时的提示等等)。
1. cdn
<script src="https://unpkg.com/vue@next"></script>
2. npm
// 最新稳定版
npm install vue@next
3. 命令行工具 (CLI)
// 最新稳定版
yarn global add @vue/cli
// 然后在Vue项目中运行(更新相关插件)
vue upgrade --next
// 创建Vue3项目跟2一样
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值