Vue3超详细教程

news2024/11/20 9:33:00

认识vue3

1. Vue2 选项式 API vs Vue3 组合式API

<script>
export default {
  data(){
    return {
      count:0
    }
  },
  methods:{
    addCount(){
      this.count++
    }
  }
}
</script>
<script setup>
import { ref } from 'vue'
const count = ref(0)
const addCount = ()=> count.value++
</script>

特点:

  1. 代码量变少
  2. 分散式维护变成集中式维护

2. Vue3的优势

在这里插入图片描述

使用create-vue搭建Vue3项目

1. 认识create-vue

在这里插入图片描述

2. 使用create-vue创建项目

前置条件 - 已安装16.0或更高版本的Node.js

执行如下命令,这一指令将会安装并执行 create-vue

npm init vue@latest

在这里插入图片描述

熟悉项目和关键文件

在这里插入图片描述

组合式API - setup选项

1. setup选项的写法和执行时机

写法

执行时机

在beforeCreate钩子之前执行
在这里插入图片描述

2. setup中写代码的特点

在setup函数中写的数据和方法需要在末尾以对象的方式return,才能给模版使用

 <script>
      export default {
        setup(){
          const message = 'this is message'
          const logMessage = ()=>{
            console.log(message)
          }
          // 必须return才可以
          return {
            message,
            logMessage
          }
        }
      }
    </script>

3.

script标签添加 setup标记,不需要再写导出语句,默认会添加导出语句

  <script setup>
      const message = 'this is message'
      const logMessage = ()=>{
        console.log(message)
      }
    </script>

组合式API - reactive和ref函数

1. reactive

接受对象类型数据的参数传入并返回一个响应式的对象

 <script setup>
     // 导入
     import { reactive } from 'vue'
     // 执行函数 传入参数 变量接收
     const state = reactive({
       msg:'this is msg'
     })
     const setSate = ()=>{
       // 修改数据更新视图
       state.msg = 'this is new msg'
     }
    </script>
    
    <template>
      {{ state.msg }}
      <button @click="setState">change msg</button>
    </template>

2. ref

接收简单类型或者对象类型的数据传入并返回一个响应式的对象

  <script setup>
     // 导入
     import { ref } from 'vue'
     // 执行函数 传入参数 变量接收
     const count = ref(0)
     const setCount = ()=>{
       // 修改数据更新视图必须加上.value
       count.value++
     }
    </script>
    
    <template>
      <button @click="setCount">{{count}}</button>
    </template>

3. reactive 对比 ref

  1. 都是用来生成响应式数据
  2. 不同点
    1. reactive不能处理简单类型的数据
    2. ref参数类型支持更好,但是必须通过.value做访问修改
    3. ref函数内部的实现依赖于reactive函数
  3. 在实际工作中的推荐
    1. 推荐使用ref函数,减少记忆负担,小兔鲜项目都使用ref

组合式API - computed

计算属性基本思想和Vue2保持一致,组合式API下的计算属性只是修改了API写法

  <script setup>
    // 导入
    import {ref, computed } from 'vue'
    // 原始数据
    const count = ref(0)
    // 计算属性
    const doubleCount = computed(()=>count.value * 2)
    
    // 原始数据
    const list = ref([1,2,3,4,5,6,7,8])
    // 计算属性list
    const filterList = computed(item=>item > 2)
    </script>

组合式API - watch

侦听一个或者多个数据的变化,数据变化时执行回调函数,俩个额外参数 immediate控制立刻执行,deep开启深度侦听

1. 侦听单个数据

 <script setup>
      // 1. 导入watch
      import { ref, watch } from 'vue'
      const count = ref(0)
      // 2. 调用watch 侦听变化
      watch(count, (newValue, oldValue)=>{
        console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`)
      })
    </script>

2. 侦听多个数据

侦听多个数据,第一个参数可以改写成数组的写法

  <script setup>
      // 1. 导入watch
      import { ref, watch } from 'vue'
      const count = ref(0)
      const name = ref('cp')
      // 2. 调用watch 侦听变化
      watch([count, name], ([newCount, newName],[oldCount,oldName])=>{
        console.log(`count或者name变化了,[newCount, newName],[oldCount,oldName])
      })
    </script>

3. immediate

在侦听器创建时立即出发回调,响应式数据变化之后继续执行回调

 <script setup>
      // 1. 导入watch
      import { ref, watch } from 'vue'
      const count = ref(0)
      // 2. 调用watch 侦听变化
      watch(count, (newValue, oldValue)=>{
        console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`)
      },{
        immediate: true
      })
    </script>

4. deep

通过watch监听的ref对象默认是浅层侦听的,直接修改嵌套的对象属性不会触发回调执行,需要开启deep

 <script setup>
      // 1. 导入watch
      import { ref, watch } from 'vue'
      const state = ref({ count: 0 })
      // 2. 监听对象state
      watch(state, ()=>{
        console.log('数据变化了')
      })
      const changeStateByCount = ()=>{
        // 直接修改不会引发回调执行
        state.value.count++
      }
    </script>
 <script setup>
      // 1. 导入watch
      import { ref, watch } from 'vue'
      const state = ref({ count: 0 })
      // 2. 监听对象state 并开启deep
      watch(state, ()=>{
        console.log('数据变化了')
      },{deep:true})
      const changeStateByCount = ()=>{
        // 此时修改可以触发回调
        state.value.count++
      }
    </script>

组合式API - 生命周期函数

1. 选项式对比组合式

在这里插入图片描述

2. 生命周期函数基本使用

  1. 导入生命周期函数
  2. 执行生命周期函数,传入回调
 <scirpt setup>
    import { onMounted } from 'vue'
    onMounted(()=>{
      // 自定义逻辑
    })
    </script>

3. 执行多次

生命周期函数执行多次的时候,会按照顺序依次执行

  <scirpt setup>
    import { onMounted } from 'vue'
    onMounted(()=>{
      // 自定义逻辑
    })
    
    onMounted(()=>{
      // 自定义逻辑
    })
    </script>

组合式API - 父子通信

1. 父传子

基本思想

  1. 父组件中给子组件绑定属性
  2. 子组件内部通过props选项接收数据

在这里插入图片描述

2. 子传父

基本思想

  1. 父组件中给子组件标签通过@绑定事件
  2. 子组件内部通过 emit 方法触发事件
    在这里插入图片描述

组合式API - 模版引用

概念:通过 ref标识 获取真实的 dom对象或者组件实例对象

1. 基本使用

实现步骤:

  1. 调用ref函数生成一个ref对象
  2. 通过ref标识绑定ref对象到标签
    在这里插入图片描述

2. defineExpose

默认情况下在

说明:指定testMessage属性可以被访问到
在这里插入图片描述

组合式API - provide和inject

1. 作用和场景

顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信
在这里插入图片描述

2. 跨层传递普通数据

实现步骤

  1. 顶层组件通过 provide 函数提供数据
  2. 底层组件通过 inject 函数提供数据

在这里插入图片描述

3. 跨层传递响应式数据

在调用provide函数时,第二个参数设置为ref对象

在这里插入图片描述

4. 跨层传递方法

顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件的数据

在这里插入图片描述

Vue3.3 新特性-defineOptions

背景说明:

但是用了


为了解决这一问题,引入了 defineProps 与 defineEmits 这两个宏。但这只解决了 props 与 emits 这两个属性。

如果我们要定义组件的 name 或其他自定义的属性,还是得回到最原始的用法——再添加一个普通的

这样就会存在两个


所以在 Vue 3.3 中新引入了 defineOptions 宏。顾名思义,主要是用来定义 Options API 的选项。可以用 defineOptions 定义任意的选项, props, emits, expose, slots 除外(因为这些可以使用 defineXXX 来做到)

在这里插入图片描述

Vue3.3新特性-defineModel

在Vue3中,自定义组件上使用v-model, 相当于传递一个modelValue属性,同时触发 update:modelValue 事件
在这里插入图片描述

我们需要先定义 props,再定义 emits 。其中有许多重复的代码。如果需要修改此值,还需要手动调用 emit 函数。

于是乎 defineModel 诞生了。
在这里插入图片描述

生效需要配置 vite.config.js

  import { fileURLToPath, URL } from 'node:url'
    
    import { defineConfig } from 'vite'
    import vue from '@vitejs/plugin-vue'
    
    // https://vitejs.dev/config/
    export default defineConfig({
      plugins: [
        vue({
          script: {
            defineModel: true
          }
        }),
      ],
      resolve: {
        alias: {
          '@': fileURLToPath(new URL('./src', import.meta.url))
        }
      }
    })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧政务,长远布局——AIGC引领,加速推进数字化政府建设

在人工智能、虚拟现实等领域迅猛发展且日益成熟的背景下&#xff0c;AI行业正迈向蓬勃发展的全新阶段&#xff0c;市场规模持续扩张。与此同时&#xff0c;数字服务也正在蓬勃兴起&#xff0c;新一代信息技术为数字政府构建了坚实支撑&#xff0c;重塑了政务信息化管理、业务架…

2023 TikTok与独立站的盈利策略与技巧!

随着 TikTok 在国际市场的兴盛&#xff0c;众多卖家开始在此平台展开布局。尽管 TikTok 尚处于初级商业化阶段&#xff0c;它的商业潜力仍然令人瞩目。 对于独立平台的卖家来说&#xff0c;TikTok 可以视为一个新的市场机会&#xff0c;结合短视频与社交电商的策略&#xff0c…

解决Springboot创建工程时,pom.xml文件中的插件spring-boot-maven-plugin报红

在初始创建工程完成之后&#xff0c;发现pom文件中有错误 spring-boot-maven-plugin这一行会报红 解决办法&#xff1a;在代码中添加版本信息 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-…

【Cortex-M3权威指南】学习笔记2 - 指令集

目录 指令集汇编语言基础UAL 近距离检视指令数据传输数据处理子程呼叫与无条件跳转指令标志位与条件转移指令隔离指令饱和运算 CM3 中新引入指令MRS\MSRIF-THENCBZ/CBNZSDIV/UDIVREV RBITSXTBTBB,TBH 指令集 汇编语言基础 一条简单的汇编指令格式&#xff08;注释使用一个分号…

PHP小白搭建Kafka环境以及初步使用rdkafka

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装java&#xff08;Kafka必须安装java&#xff0c;因为kafka依赖java核心&#xff09;二、安装以及配置Kafka、zookeeper1.下载Kafka&#xff08;无需下载…

从零开始配置Jenkins与GitLab集成:一步步实现持续集成

在软件开发中&#xff0c;持续集成是确保高效协作和可靠交付的核心实践。以下是在CentOS上安装配置Jenkins与GitLab集成的详细步骤&#xff1a; 1.安装JDK 解压JDK安装包并设置环境变量&#xff1a; JDK下载网址 Java Downloads | Oracle 台灣 tar zxvf jdk-11.0.5_linux-x64_b…

在Linux中使用gcc/g++编译代码

gcc/g 1.方法速记2.具体过程2.1 预处理阶段2.2 编译阶段2.3 汇编阶段2.4链接阶段2.4.1 链接的细节 gcc和g的操作一样&#xff0c;g的方法就仅需把gcc换成g即可。 1.方法速记 直接编译语法&#xff1a;将text.c文件或者text.cpp文件直接编译成text文件。 gcc text.c -o text /…

微软 Visual Studio 现已内置 Markdown 编辑器,可直接修改预览 .md 文件

Visual Studio Code V1.66.0 中文版 大小&#xff1a;75.30 MB类别&#xff1a;文字处理 本地下载 Markdown 是一种轻量级标记语言&#xff0c;当开发者想要格式化代码但又不想牺牲易读性时&#xff0c;Markdown 是一个很好的解决方案&#xff0c;比如 GitHub 就使用 Markdo…

公司阿里云服务器被暴力破解

公司阿里云服务器被暴力破解&#xff1f; 公司云服务器跑了3年了&#xff0c;从来没改过密码&#xff0c;而且基本所有服务器密码都是同一个&#xff0c;只把公司IP添加白名单了。&#xff08;确实不严谨&#xff0c;但至少限制了连接源&#xff09; 突然就收到阿里云短信提醒…

ppt如何转pdf文档?用这个方法可将ppt转pdf

在现代社会中&#xff0c;PPT(幻灯片)已成为一种常见的演示工具&#xff0c;被广泛应用于学术、商务、培训等领域。然而&#xff0c;PPT文件的使用和分享存在一些问题&#xff0c;例如文件格式不兼容、内容修改易被篡改等。为了解决这些问题&#xff0c;将PPT转换为PDF格式已成…

【一文读懂】 Java并发 - 锁升级原理

要明白锁的原理&#xff0c;首先要知道对象头 Java对象头 在Java中&#xff0c;一个对象一般由两部分组成 &#xff1a;1、对象头 &#xff1b; 2、对象的成员变量信息 在32位的虚拟机中&#xff1a; &#xff08;1&#xff09;普通对象的对象头长度64bit&#xff08;8字节&…

Javascript 编写一个简单的聊天机器人

在本 Web 开发教程中&#xff0c;我们将了解如何使用 HTML、CSS 和 vanilla JavaScript 创建基本的聊天机器人。本练习侧重于 JS 基础知识&#xff0c;而不是任何类型的人工智能 &#xff08;AI&#xff09;。为了使该过程更简单&#xff0c;更易于学习&#xff0c;我没有使用任…

ffmpeg windows环境MinGW+msys2编译so库

一、安装MinGW 1.1、下载MinGW 1.2、下载完成后&#xff0c;会得到一个名为 mingw-get-setup.exe 的安装包&#xff0c;双击打开它&#xff0c;可以看到如下的对话框&#xff1a; 1.3、直接点击“Install”&#xff0c;进入下面的对话框 1.4、可根据自己操作系统的实际情况&am…

数据库MySQL中left join多个条件下的执行

1 基础表 创建表A 表B create table testA(id int, name varchar(10)); create table testB(id int, name varchar(10)); 2 插入数据 insert into testA values(1,zhangssa),(2,lisi),(3,wangwu) insert into testB values(2,zhangssa2),(3,lisi2),(4,wangwu4) 3 left joi…

WPF自定义命令及属性改变处理

1、项目建构 2、自定义命令 namespace WpfDemo.Base {public class MyCommand : ICommand{Action executeAction;public MyCommand(Action action){executeAction action;}public event EventHandler? CanExecuteChanged;public bool CanExecute(object? parameter){retu…

ssm会员管理系统源码和论文

ssm会员管理系统源码和论文062 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#x…

36k字从Attention讲解Transformer及其在Vision中的应用(pytorch版)

文章目录 0.卷积操作1.注意力1.1 注意力概述(Attention)1.1.1 Encoder-Decoder1.1.2 查询、键和值1.1.3 注意力汇聚: Nadaraya-Watson 核回归1.2 注意力评分函数1.2.1 加性注意力1.2.2 缩放点积注意力1.3 自注意力(Self-Attention)1.3.1 自注意力的定义和计算1.3.2 自注意…

邀请函 | 区块链如何助力建设“健康中国”?ESG系列研讨会“医疗”专场来袭!

党的十九大报告指出&#xff0c;要全面实施健康中国战略&#xff0c;为人民群众提供全方位全周期健康服务。今年7月&#xff0c;国家卫生健康委等六部门联合印发了《深化医药卫生体制改革2023年下半年重点工作任务》&#xff0c;明确指出要开展全国医疗卫生机构信息互通共享三年…

基于 vue2 发布 npm包

背景&#xff1a;组件化开发需要&#xff0c;走了一遍发布npm包的过程&#xff0c;采用很简单的模式实现包的发布流程&#xff0c;记录如下。 项目参考&#xff1a;基于vue的时间播放器组件&#xff0c;并发布到npm_timeplay.js_xmy_wh的博客-CSDN博客 1、项目初始化 首先&a…

AKM10-58C大电流TVS二极管参数:58V 10000A

东沃&#xff08;DOWO&#xff09;AKM10-76C是什么二极管&#xff1f; 东沃生产AKM10-76C大电流TVS二极管吗&#xff1f;有现货吗&#xff1f; 除了AKM10-76C外&#xff0c;东沃&#xff08;DOWO&#xff09;生产的贴片大电流二极管还有哪些型号&#xff1f; …… AKM10-76C是厂…