vue3 学习 之 vue3使用

news2024/11/11 5:47:28

为什么要学习vue3呢?

vue2.0也是现在比较稳定的一个版本,社区还有周边都比较完善,如果不是非必要其实我们不需要着急直接升级到vue3.0;
那为什么还要学习,主要是还是为了了解一下vue3.0相较于2.0的优势和特性,方便之后3.0版本的社区和周边完善之后,我们直接升级到3.0去使用,还有就是为了提升一下技术和涨薪资,毕竟3.0刚出的时候就受到了业内各个大佬的关注,现在的前端圈最火的也就是vue3.0了,所以不管是为了学习新的知识,还是学习尤大的编程思想,亦或者是为了涨薪资我们都有必要去看一看学一学。

怎么从2.0版本升级到3.0版本?

首先我们想要体验3.0版本还是得先升级,下边先介绍几个可以升级到3.0版本的方法;

1.第一种方式, 使用官方的vue-cli脚手架升级;如果有看不明白的同学可以直接去官网查看vue-cli

// 先把脚手架升级到最新版本,如果之前没有安装过的话,直接全局安装就是最新版本的4.0
npm install -g @vue/cli
or
yarn global add @vue/cli

// 如果已经安装过的可以升级一下版本
npm update -g @vue/cli
or
yarn global upgrade --latest @vue/cli

ps: 把版本升级到最新之后,就可以直接开始安装了,先创建一个vue3.0的项目

vue create vue3 // 默认选择3.0版本创建就可以了,创建之后就可以运行一下体验了
cd vue3 // 进去之后
yarn serve

ps: 如果忘了选择3.0?没事的不打紧还可以进入项目中安装

// 如果你创建的项目是默认选择的2.0版本, 按下边的操作就可以
yarn add vue-next // add vue-next 会自动升级到vue3的版本

2.第二种方式使用vite安装,这个也是尤大的力作 vite github 地址

// 首先我们需要先把vite代码clone到本地
git clone https://github.com/vitejs/vite.gi

cd vite // 进入文件

yarn // 开始安装依赖

yarn build // 打包

yarn link

ps: 开始创建你的项目

yarn create vite-app project-name
cd project-name
yarn
yarn dev

ps: 完成上述操作就可以开始愉快的体验vue3.0了

vue3的composition API的简单介绍和使用 compositon API 使用官方手册

1.首先先来认识一下composition API

什么是composition API?字面解释就是组合式API,也就是将原来的很多底层的方法拆分开,暴露出来让大家去使用;
比如原来的方法只能写在methods里边,但是在vue3中是有一定变化的,要放到setup中去使用;

下边先来看几个我觉得比较重要的API,先简单的介绍下使用方式?感受下跟之前的2.0有什么不一样的地方;

image
1.createApp // 顾名思义,创建一个APP实例,不过要怎么使用呢?
// 先导入createApp模块
import { createApp } from 'vue';
import App from './App.vue';

// 使用createApp方法将我们的入口文件放进去,最后挂载
createApp(App).mount('#app');
2.onMounted // 跟之前的写法不一样了不过,多了一个on
// 先导入onMounted模块
import { onMounted, defineComponent } from 'vue';

export default defineComponent({
    setup () {
        // 使用的时候需要放在setup里边
        onMounted(() => {
            console.log('组件挂在结束开始打印。。。')
        })
    }
})

3.computed 计算机属性
import { computed, ref } from 'vue';

// 基本操作
const count = ref(1)
const plusOne = computed(() => count.value + 1)

console.log(plusOne.value) // 2

plusOne.value++ // 错误!
import { computed, ref } from 'vue';

// 可以修改值
const count = ref(1)
const plusOne = computed({
  get: () => count.value + 1,
  set: (val) => {
    count.value = val - 1
  },
})

plusOne.value = 1
console.log(count.value) // 0
4.watch 监听器
import { reactive, watch } from 'vue';
// 侦听一个 getter
const state = reactive({ count: 0 })
watch(
  () => state.count,
  (count, prevCount) => {
    /* ... */
  }
)

// 直接侦听一个 ref
const count = ref(0)
watch(count, (count, prevCount) => {
  /* ... */
})
5.watchEffect 监听器的升级版本,立即执行传入的一个函数,并响应式追踪其依赖,并在其依赖变更时重新运行该函数。
const count = ref(0)

watchEffect(() => console.log(count.value))
// -> 打印出 0

setTimeout(() => {
  count.value++
  // -> 打印出 1
}, 100)

停止侦听,当 watchEffect 在组件的 setup() 函数或生命周期钩子被调用时, 侦听器会被链接到该组件的生命周期,并在组件卸载时自动停止。

const stop = watchEffect(() => {
  /* ... */
})

// 之后
stop()
6.reactive 接收一个普通对象然后返回该普通对象的响应式代理。等同于 2.x 的 Vue.observable(),注意在源码中明确显示需要传递一个对象,否则会抛出异常,如果想要对一个单独的变量使用响应式,可以使用ref下边介绍
const obj = reactive({ count: 0 }) // 返回的就是响应式对象
// 使用
obj.count ++
console.log(obj.count) // 输出的是1

如果想要在组件内使用这个变量需要在setup中返回

第一种返回形式

<template>
    <!-- 这种形式在组件内使用的时候需要obj.count -->
    <p>{{ obj.count }}</p> 
</template>
import { reactive } from 'vue';

export default defineComponent({
    setup () {
        const obj = reactive({ count: 0 })
        return { obj } // 这种形式在组件内使用的时候需要obj.count
    }
})

第二种返回形式

<template>
    <!-- 这种形式在组件内使用的时候跟之前一样 -->
    <p>{{ count }}</p> 
</template>
import { reactive, toRefs } from 'vue';

export default defineComponent({
    setup () {
        const obj = reactive({ count: 0 })
        return { ...toRefs(obj) }
    }
})
7.toRefs 把一个响应式对象转换成普通对象,该普通对象的每个 property 都是一个 ref ,和响应式对象 property 一一对应。

上边的例子为什么要用toRefs包裹起来呢,因为是这样的, reactive,实际上是使用的proxy代理了整个对象,返回的是整个对象都是响应式,但是如果这个对象里边的层级很多怎么办,对象中还有对象,那么里边的对象就不是一个响应式了,所以就用toRefs包裹一下,这样相当于是整个对象里边的属性,在源码内部已经做了一次递归,把所有的属性都做了判断,如果是引用类型就会使用proxy再次代理一次,所以整个对象的属性都是响应式的,也就是下边这样的写法;

import { reactive, toRefs } from 'vue';

export default defineComponent({
    setup () {
        const obj = reactive({ count: 0 })
        return { ...toRefs(obj) }
    }
})
8.ref 接受一个参数值并返回一个响应式且可改变的 ref 对象。ref 对象拥有一个指向内部值的单一属性 .value。
const count = ref(0)
console.log(count.value) // 0

count.value++
console.log(count.value) // 1
9.toRef 可以用来为一个 reactive 对象的属性创建一个 ref。这个 ref 可以被传递并且能够保持响应性。
const state = reactive({
  foo: 1,
  bar: 2,
})

const fooRef = toRef(state, 'foo')

fooRef.value++
console.log(state.foo) // 2

state.foo++
console.log(fooRef.value) // 3
10.nextTick 跟之前的作用一样只不过呢写法略有不同,想要详细了解的话可以看这里vue nextTick 异步更新机制
import { nextTick } from 'vue';

export default defineComponent({
    setup () {
        nextTick(() => {
            console.log('--- DOM更新了 ---')
        })
    }
})

关于composition API的介绍就先介绍到这里了,感兴趣的同学可以看这里:
composition API
Vue 组合式 API 心智负担
ps: 有兴趣的同学,想要用一下但是不清楚具体怎么使用我写了一个简单地demo可以帮助大家熟悉一下vue3 demo



喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

C++20中的基于范围的for循环(range-based for loop)

C11中引入了对基于范围的for循环(range-based for loop)的支持&#xff1a;该循环对一系列值(例如容器中的所有元素)进行操作。代码段如下&#xff1a; const std::vector<int> vec{ 1,2,3,4,5 }; for (const auto& i : vec)std::cout << i << ", …

推荐系统三十六式学习笔记:原理篇.MAB问题18|如何将Bandit算法与协同过滤组合使用

目录 信息茧房COFIBA1.思想2.细节 再谈EE问题总结 荐系统中最经典的算法是协同过滤&#xff0c;其背后的思想简单深刻&#xff0c;在万物互联的今天&#xff0c;协同过滤的威力更加强大。与其说协同过滤是一门技术&#xff0c;不如说是一种方法论&#xff0c;协同过滤生动的诠释…

MySQL 索引你必须知道的那些事

MySQL 索引你必须知道的那些事 一、什么是索引&#xff1f;二、索引相关命令演示三、添加索引的条件四、索引失效的几种情况五、索引背后的数据结构1、概述2、B树3、B树4、如果一个表中有多个索引&#xff08;回表现象&#xff09; 一、什么是索引&#xff1f; 索引是在数据库…

Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案

一、问题背景 最近在开发app项目&#xff0c;其中有个需求就是需要在app软件内显示图片、pdf和视频&#xff0c;一开始想的解决方案是分开实现&#xff0c;也就是用Image组件显示图片&#xff0c;找一个加载pdf的插件和播放视频的插件&#xff0c;转念一想觉得太麻烦了&#x…

StarRocks下载使用说明和基础操作

简介 StarRocks 是一款高性能分析型数据仓库&#xff0c;使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据&#xff0c;也支持直接分析数据湖上各种格式的数…

【productj服务导出文件503问题】

设备服务只要导出文件&#xff0c;就报503&#xff0c;查看K8S发现服务重启 1. 复现问题1.1 问题复现频繁fullGC 宿主pod服务日志监控1.2 小内存复现 接口没啥问题&#xff0c;导出就会导致服务重启 1. 复现问题 当前uat环境配置&#xff1a; pod内存&#xff1a;2G JVM参数&a…

力扣 第 134 场双周赛 解题报告 | 珂学家

前言 题解 T1/T3是环形的处理技巧&#xff0c;这边可以double数组(更准确地讲&#xff0c;添加一个合适的小尾巴). T4是典题&#xff0c;前不久周赛刚考过&#xff0c;是一道结论题&#xff0c;也可以借助数据结构处理。 T1. 交替组 I 和T3一起讲 T2. 与敌人战斗后的最大分数…

Docker-11☆ Docker Compose部署RuoYi-Cloud

一、环境准备 1.安装Docker 附:Docker-02-01☆ Docker在线下载安装与配置(linux) 2.安装Docker Compose 附:Docker-10☆ Docker Compose 二、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至G…

Qwen知识蒸馏小试牛刀,在MT-Bench与AlpacaEval 2.0的表现大幅提升

Qwen知识蒸馏小试牛刀&#xff0c;在MT-Bench与AlpacaEval 2.0的表现大幅提升 原创 荷风微摆 YeungNLP 2024年07月08日 01 前言 本文主要分享我们在大模型知识蒸馏上的实验尝试&#xff0c;以及所取得的实验效果提升。我们在5月份完成了该实验&#xff0c;但由于各种原因&…

Springboot实战:AI大模型+亮数据代理助力短视频时代

目录 前言1.如何入门亮数据1.1、注册登录1.2、注册账号1.3、登录1.4、购买静态住宅代理1.5、展示购买的代理 2. 使用Springboot、AI大模型构建系统2.1 使用Springboot、AI大模型构建爬虫2.2、在Springboot项目添加工具 3、编写代码&#xff0c;爬取视频素材3.1、代码里使用代理…

I 2U-Net:具有丰富信息交互的双路径 U-Net 用于医学图像分割| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 I 2U-Net: A dual-path U-Net with rich information interaction for medical image segmentation I 2U-Net&#xff1a;具有丰富信息交互的双路径 U-Net 用于医学图像分割 01 文献速递介绍 在计算机视觉领域&#xff0c;医学图像分割是一个主要挑战&#xff…

深入解析:抖音视频标题的Python爬虫提取方法

引言 随着短视频的兴起&#xff0c;抖音已经成为全球最受欢迎的社交媒体平台之一。对于数据分析师、市场研究人员以及内容创作者来说&#xff0c;能够从抖音上抓取数据是一项宝贵的技能。本文将深入解析如何使用Python编写爬虫程序来提取抖音视频的标题。 爬虫基础 在开始编…

家里猫咪浮毛太多怎么办?值得买的猫毛空气净化器推荐

作为一位拥有5年铲屎经验的铲屎官&#xff0c;我知道许多新手铲屎官可能听说过宠物空气净化器&#xff0c;但了解得不多。事实上&#xff0c;宠物空气净化器确实是养猫家庭必备的小家电之一。它的大面积进风口可以有效吸附空气中的微小浮毛和皮屑&#xff0c;专门的除臭技术能有…

使用 Python 处理 Lumerical 导出的 .txt 文件(完结)

使用 Python 处理 Lumerical 导出的 .txt 文件 引言正文以 , 隔开的波长与透射率以 \t 隔开的波长与透射率引言 之前在 添加链接描述 一文中我们已经介绍了如何将 Lumerical 仿真中的 S 参数相关数据导出为 .txt 文件。这里我们来分享如何使用 Python 对这些数据进行处理。 正…

旋转木马案例

旋转木马 如果接口需要的数据格式和原始数据提供的格式有差异 不要去改接口方法 也不要改原始数据 做一层中间件(数据处理函数/方法) <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport…

分销密文下单

背景 事情的经过就是今天早上一共下了10个单&#xff0c;然后就下不了单了。 如下图&#xff1a; 来到抖店后台显示什么解密额度已经用完了 所以&#xff0c;今天必须把困扰我很久的分销密文下单解决掉 操作 1688分销下单-逸淘订单 1 先关联商品 2 下单 首页导航栏--1688分…

重塑通信边界,基于ZYNQ7000 FPGA驱动的多频段多协议软件无线电平台

01、产品概述 本平台是基于高性能ZYNQ-7000系列中的XC7Z045处理器构建的多频段多协议软件无线电解决方案&#xff0c;集成了AD9364芯片——一款业界领先的1x1通道RF敏捷收发器&#xff0c;为无线通信应用提供了强大支持。其存储架构包括2路高速4GB DDR3内存、1路32GB EMMC存储以…

可信验证解释

学习目标&#xff1a;可信验证解释 可信验证是一种基于计算机技术和安全机制&#xff0c;用于确保系统、程序或数据的完整性和可信性的方法。以下是关于可信验证的详细解释&#xff1a;一、定义与原理 可信验证指的是利用计算机技术和安全机制&#xff0c;对系统、程序或数据…

MobaXterm工具

MobaXterm 是一个增强型的 Windows 终端。其为 Windows 桌面提供所有重要的远程网络终端工具&#xff08;如 SSH、X11、RDP、VNC、FTP、SFTP、Telnet、Serial、Mosh、WSL 等&#xff09;&#xff0c;和 Unix 命令&#xff08;如 bash、ls、cat、sed、grep、awk、rsync 等&#…

深度学习编码解码结构-以及kreas简单实现

图像分割中的编码解码结构&#xff08;Encoder-Decoder Model&#xff09;是一种广泛应用的网络架构&#xff0c;它有效地结合了特征提取&#xff08;编码&#xff09;和分割结果生成&#xff08;解码&#xff09;两个过程。以下是对图像分割中编码解码结构的详细解析&#xff…