Vue3学习

1Vue3介绍

Vue 3是Vue.js框架的最新版本,于2020年9月正式发布。它在Vue 2的基础上进行了重大改进和增强,为开发者提供了更好的性能、开发体验和功能。主要体现在以下方面:

  1. 响应式系统
    • Vue 3引入了基于ES6 Proxy的响应式系统,取代了Vue 2中基于Object.defineProperty的实现。这种改变使得Vue 3的响应式系统更强大和灵活,能够捕获更多类型的变更,提供更好的性能,并且支持动态添加和删除属性。
  2. Composition API
    • Vue 3引入了组合式API(Composition API),作为选项式API(Options API)的补充。组合式API允许开发人员以更模块化、更函数式的方式来组织组件逻辑,提高了代码的可维护性和复用性。它通过使用函数来组织代码,而不仅仅依靠选项,从而提供了更灵活、组合性更强的组件开发方式。
  3. 性能优化
    • Vue 3采用了虚拟DOM算法的改进,通过静态提升(Static Nodes Hoisting)和基于模块的编译优化,提供了更好的性能。它具有更高的渲染速度、更小的包大小,以及更好的Tree-shaking支持,使应用程序更高效。
  4. Teleport组件
    • Vue 3引入了Teleport组件,它使得在DOM树中的任何位置渲染组件变得更容易。Teleport组件在处理跨组件层级的弹出窗口、对话框和模态框等场景时非常有用。
  5. TypeScript支持
    • Vue 3更好地集成了TypeScript,并提供了更准确的类型推断和类型检查。这使得在Vue应用程序中使用TypeScript变得更加流畅和安全。
  6. 全局API重构
    • Vue 3对全局API进行了重构,以提高可用性和一致性。例如,全局的Vue.observable()方法现在更名为reactive(),全局的Vue.set()方法更名为app.$set()。
  7. 其他新特性
    • Vue 3还支持组件的多个根节点,这意味着可以在一个组件内返回多个顶级元素,而不必包裹它们在一个额外的容器内。
    • 引入了Suspense组件,用于处理异步数据加载和代码拆分,可以在等待异步数据时显示占位符或加载指示器,以提供更好的用户体验。

2 vue3 项目创建

3 vue3 的项目结构

 4 语法糖写法

5 reactive和ref函数

举例

<script setup>
  import { reactive } from 'vue'
  const state = reactive({
    count: 0
  })

</script>
<template>
<button @click="state.count++">{{state.count}}</button>
</template>
<style scoped lang='less'>
</style>

举例

6 计算属性

和 Vue2 不同,Vue2 中是选项式API,Vue3 中是组合式API。 

7 watch

举例

 

 8 深度监听

 9 vue3生命周期

Vue2 钩子Vue3 钩子说明
beforeCreate被 setup() 替代初始化响应式数据前触发
created被 setup() 替代初始化响应式数据后触发
beforeMountonBeforeMount组件挂载到 DOM 前触发
mountedonMounted组件挂载到 DOM 后触发(操作 DOM)
beforeUpdateonBeforeUpdate数据变化导致 DOM 更新前触发
updatedonUpdatedDOM 更新完成后触发
beforeDestroyonBeforeUnmount组件卸载前触发(清理资源)
destroyedonUnmounted组件卸载后触发

10 组件间通信

 10.1父传子

10.2 子传父

 11 模板引用

举例 

 12 defineExpose

13 provide和inject 

 

 14 Pinia

之前学了父子组件之间传递数据,通过 属性回调函数的形式来传递。但是如果涉及到多级组件嵌套,各个组件之间传递数据会非常麻烦。尤其是遇到没有父子关系的组件,在其间传递数据会更麻烦。

Pinia 就是为了保存组件之间的共享数据,如果组件之间有要共享的数据,可以把数据保存到 Pinia 中,Pinia 就是提供一个全局的共享数据存储区域,相当于一个数据仓库,各个组件都可以从中读取和修改数据。

在 Vue2 中我们使用 Vuex 做状态管理,在 Vue3 中使用 Pinia。

14.1 安装Pinia

# npm方式安装
npm install pinia

# yarn方式安装
yarn add pinia

14.2挂载数据存储对象

在项目的 main.ts 中引入 pinia 并挂载到Vue实例上。

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

// 1.引入pinia
import { createPinia } from 'pinia'

const app = createApp(App)

// 2.创建pinia
const pinia = createPinia()

// 3. 安装pinia
app.use(pinia)

// 安装路由
app.use(router)
app.mount('#app')

举例 

 14.3 使用示例

可看官方文档

介绍 | Pinia 中文文档 (web3doc.top)

14.4 getters

14.5  action

 14.6 storeToRefs

就是pinia数据使用时直接进行解构赋值,那么会丢失响应性,就需要用到storeToRefs来辅助解构,保持数据的响应性。方法则不需要。

15 src目录

16 别名路径联想设置 

 17 elementPlus

官网如下:快速开始 | Element Plus (element-plus.org)

安装

# 选择一个你喜欢的包管理器

# NPM
npm install element-plus --save

# Yarn
yarn add element-plus

# pnpm
pnpm install element-plus

安装插件

npm install -D unplugin-vue-components unplugin-auto-import

添加配置:

// vite.config.ts
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  // ...
  plugins: [
    // ...
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
})

17.1 自定义主题

安装

 基于vite的项目默认不支持css预处理器,需要开发者单独安装

 npm i sass -D

准备定制化的样式文件

/* 只需要重写你需要的即可 */
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
  $colors: (
    'primary': (
      // 主色
      'base': #27ba9b,
    ),
    'success': (
      // 成功色
      'base': #1dc779,
    ),
    'warning': (
      // 警告色
      'base': #ffb302,
    ),
    'danger': (
      // 危险色
      'base': #e26237,
    ),
    'error': (
      // 错误色
      'base': #cf4444,
    ),
  )
)

自动导入配置

这里自动导入需要深入到elementPlus的组件中,按照官方的配置文档来

  1. 自动导入定制化样式文件进行样式覆盖

  2. 按需定制主题配置 (需要安装 unplugin-element-plus)

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// 导入对应包

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver({importStyle: 'sass'})],
    }),


  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  css: {
    preprocessorOptions: {
      scss: {
        // 自动导入定制化样式文件进行样式覆盖
        additionalData: `
          @use "@/styles/element/index.scss" as *;
        `,
      }
    }
  }
})

18 axios基础封装

import axios from 'axios'
 
// 创建一个新的axios实例
const request = axios.create({
  baseURL: 'http://smart-shop.itheima.net/index.php?s=/api',
  timeout: 5000
})
// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么,
    return config
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  })
  // 添加响应拦截器
request.interceptors.response.use(
    function (response) {
      // 对响应数据做点什么
      const res = response.data
      if (res.status !== 200) {
        return Promise.reject(res.message)
      } 
      return res
    }, function (error) {
      // 对响应错误做点什么
      return Promise.reject(error)
    })
    export default request

19 router配置

import { createRouter, createWebHistory } from 'vue-router'
import Login from '@/views/login/index.vue'
import Home from '@/views/layout/index.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [{
    path: '/',
    component: Home,
  },
  {
    path: '/login',
    component: Login
  },
  
  ]
})

export default router

配置路由出口

<think>好的,我现在需要帮助用户找到学习Vue3的相关资料和教程。首先,我应该回顾用户提供的引用内容,看看有没有可以直接利用的信息。 用户提到了引用[2],里面有一个详细的Vue3入门教程,适合小白系统学习。这可能是一个很好的起点。另外,引用[3]对比了Vue2和Vue3在TypeScript支持上的不同,提到Vue3不再需要额外的装饰器库,这可能是一个重要的学习点,需要强调。 接下来,我需要整理用户可能需要的资源类型。通常,学习框架会涉及官方文档、教程视频、实战项目、社区资源等。根据引用[2],Element Plus是Vue3的UI库,应该包含在推荐的学习资料中,特别是组件库的使用部分。 用户可能需要知道Vue3的新特性,比如Composition API、性能优化、更好的TypeScript集成等。引用[3]指出Vue3解决了Vue2中使用TS的复杂性,这一点应该重点说明,因为这对于选择学习Vue3的优势很重要。 还要考虑用户的学习路径,从基础到进阶。官方文档是必须推荐的,然后搭配实战教程和视频课程。社区资源如掘金、知乎可能会有更多实战经验和问题解答,这对学习者很有帮助。 另外,用户可能不清楚Vue3Vue2的主要区别,是否需要先学习Vue2?根据引用[3],Vue3在TS支持和API设计上有改进,可能更适合直接学习,尤其是新项目。因此,建议用户直接学习Vue3,特别是如果他们已经有一定前端基础的话。 最后,生成相关问题需要考虑用户可能遇到的后续疑问,比如如何搭建环境、新特性详解、项目实战、与Vue2的对比以及如何结合TS使用。这些问题可以帮助用户深入学习,覆盖他们可能需要的各个方面。</think>### Vue3 学习资料与教程推荐 #### 1. **官方文档与核心资源** - **Vue3 官方文档** Vue3 的官方文档是学习的最佳起点,包含完整的核心概念、API 说明和迁移指南[^2]。地址:[https://v3.vuejs.org/](https://v3.vuejs.org/) **重点内容**: - Composition API(组合式 API) - Teleport、Suspense 等新特性 - TypeScript 支持优化 - **Vue3 生态工具** - **Vite**:快速构建工具,支持 Vue3 项目初始化。示例命令: ```bash npm create vite@latest my-vue-app -- --template vue ``` - **Element Plus**:专为 Vue3 设计的 UI 组件库,替代 Vue2 的 Element-UI。文档地址:[https://element-plus.gitee.io/](https://element-plus.gitee.io/) #### 2. **系统教程与实战项目** - **入门教程** - 《Vue3 入门到精通》系列教程(引用[2]提到的资源),适合小白系统学习,覆盖基础语法、组件开发、状态管理等。 - **B站免费视频课程**:搜索“Vue3 零基础入门”,推荐技术胖、尚硅谷等频道的课程。 - **实战项目推荐** - **电商后台管理系统**:结合 Element Plus 实现登录、权限管理、数据可视化等功能。 - **TODO 应用**:通过 Composition API 实现状态管理和组件通信。 #### 3. **TypeScript 整合** Vue3 对 TypeScript 的支持显著优于 Vue2,无需依赖 `vue-class-component` 等额外库[^3]。学习路径: 1. 官方文档的 **TypeScript 支持章节** 2. 实战:使用 Vue3 + TS 开发一个简单的表单验证组件 #### 4. **社区与进阶资源** - **掘金/知乎专栏**:搜索“Vue3 深度解析”,获取工程化实践和性能优化技巧。 - **GitHub 开源项目**:参考 `vueuse`(Vue3 工具库)、`pinia`(状态管理)等源码。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值