vue3 学习 之 vue3使用

为什么要学习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) // 2plusOne.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))
// -> 打印出 0setTimeout(() => {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) // 0count.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) // 2state.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.mzph.cn/bicheng/42940.shtml

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

相关文章

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

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

浏览器控制台打印日志的方法汇总

目录 console.table用法 打印数组 打印对象 打印数组对象 打印数组对象里的指定字段 console.count用法 不传参打印 传参打印 console.warn用法 打印文本 打印对象 console.error用法 打印文本 打印对象 console.assert用法 打印文本 打印对象 consol…

AI视频创作一条龙!达摩院“寻光”平台炸场WAIC,突破可控编辑难题

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(一)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

C语言下结构体、共用体、枚举类型的讲解

主要内容 结构体结构体数组结构体指针包含结构体的结构链表链表相关操作共用体枚举类型 结构体 结构体的类型的概念 结构体实现步骤 结构体变量的声明 struct struct 结构体名{ 数据类型 成员名1; 数据类型 成员名2; ..…

从数据到洞察:DataOps加速AI模型开发的秘密实践大公开!

作者 | 代立冬&#xff0c;白鲸开源科技联合创始人&CTO 引言 在AI驱动的商业世界中&#xff0c;DataOps作为连接数据与洞察的桥梁&#xff0c;正迅速成为企业数据战略的核心。 在WOT全球技术创新大会2024北京站&#xff0c;白鲸开源联合创始人&CTO 代立冬 在「大数据…

严重的OpenSSH漏洞威胁数百万Linux系统

Qualys威胁研究部门(TRU)发现了OpenSSH服务器 (sshd) 中的一个严重漏洞&#xff0c;可能影响全球超过 1400 万个Linux系统。该漏洞被指定为 CVE-2024-6387&#xff0c;允许在基于 glibc 的 Linux 系统上以 root 权限进行远程未经身份验证的代码执行 (RCE)。 此漏洞源于信号处理…

Python 处理Excel 文件, openpyxl 库的使用:

下载&#xff1a; pip install openpyxl 基本使用&#xff1a; 新建一个Excel 工作簿&#xff1a; 使用openpyxl 需要先导入一个Workbook 类&#xff0c; 使用它可以创建一个Workbook<工作簿>对象&#xff0c; 也就是创建一个Excel表文件&#xff0c; web.active 可用来…

5款好用公司监控软件分享|管理者必看

当今社会&#xff0c;企业数据安全和员工工作效率成为了管理者不可忽视的重要议题。 选择合适的公司监控软件&#xff0c;不仅有助于提升管理效率&#xff0c;还能有效保障企业信息安全。 下面小编将为您分享五款备受好评的公司监控软件&#xff0c;助力管理者更好地管理企业…

公司可以拿监控辞退员工吗?有什么法律依据?

李经理&#xff1a;小张&#xff0c;我听说最近人力资源部打算使用我们新安装的安企神软件来监控员工的工作行为&#xff0c;以提高工作效率和确保公司信息安全。不过&#xff0c;我有点担心这会不会触及法律红线&#xff0c;比如如果我们发现某位员工严重违反公司规定&#xf…

ElasticSearch学习篇14_《检索技术核心20讲》进阶篇之大倒排索引

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 内容 主要是海量数据的大倒排索引的一些原理设计思想&#xff0c;ES底层就是基于这些设计思想以及原理&#xff0c;主要涉及读写分离、索引分层等…

什么是离散化?

离散化 题目 你会这个题 吗&#xff1f; 题目 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 0 0 0。 现在&#xff0c;我们首先进行 n n n 次操作&#xff0c;每次操作将某一位置 x x x 上的数加 c c c。 接下来&#xff0c;进行 m m m 次询问&#x…

第十二节 设置默认文本提示

原型中我们常会用到文本框默认提示一些文本&#xff0c;获取焦点后消失文本提示&#xff0c;那如何实现呢&#xff1f;请看下面这个简单案例。 一、添加文本框也可以是矩形或者其他元件 二、添加文本样式 三、设置提示文本 四、元件获取焦点时将以隐藏提示 五、看效果 默认提示…

ShardingSphereConnection@4691d] will not be managed by Spring

boot整合分库分表后启动执行&#xff0c;提示链接不被spring管理&#xff0c; 应该看自己需要&#xff0c; 解决&#xff1a;

vue3+ts 重复参数提取成方法多处调用以及字段无值时不传字段给后端

参数提取前的写法&#xff0c;此写法值为空的时候也会传空字段给后端 会把无值的空字段传给后端 修改后的写法&#xff0c;不会把没有值的字段传给后端 // 列表和导出需要传给后端的公共参数&#xff08;加 || undefined即可过滤空字段&#xff09; const getCurentParam () …

昇思25天学习打卡营第14天|Pix2Pix实现图像转换

Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c;可以实现语义/标签到真实图片、灰度图到彩色图、航空图到…

leetcode--二叉搜索子树的最大键值和

leetcode地址&#xff1a;二叉搜索子树的最大键值和 给你一棵以 root 为根的 二叉树 &#xff0c;请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下&#xff1a; 任意节点的左子树中的键值都 小于 此节点的键值。 任意节点的右子树中的键值都 大于 此节点的键值…

IOC、DI<4> Unity

IOC&#xff08;&#xff09;&#xff1a;控制反转&#xff0c;把程序上层对下层的依赖&#xff0c;转移到第三方的容器来装配 是程序设计的目标&#xff0c;实现方式包含了依赖注入和依赖查找&#xff08;.net里面只有依赖注入&#xff09; DI&#xff1a;依赖注入&#xff0c…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(一)一些样式的调整使用

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、比如下面的发起人双击后出现的界面不正常&#xff0c; 看它的样式主要是这个里面的margin-left应该太小了&#xff0c; [data-v-45b533d5] .el-tabs__content { margin-top: 50px;mar…

7.1作业6

uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h" //rcc/gpio/uart4初始化 void hal_uart4_init(); //发送一个字符 void hal_put_char(const char s…