Vue3入门

文章目录

  • 一、Vue3介绍
  • 二、Vue3项目创建
    • 1)使用vue-cli创建vue3项目
    • 2)使用vite创建vue3项目
  • 三、Setup函数
    • vue2的创建vue实例和vue3创建vue实例的区别
  • 四、ref和reactive
    • 1)ref函数
    • 2)reactive函数
    • 3)reactive对比ref
    • 4)setup的两个注意点
  • 五、计算属性与监听属性
    • 1)计算属性(computed函数)
    • 2)监听属性(watch函数)
  • 六、Vue3生命周期
  • 七、toRef

一、Vue3介绍

关于vue项目的版本,新项目使用vue3,有部分老项目使用vue2。

vue3官方文档

vue3的变化

	1.性能的提升-打包大小减少41%-初次渲染快55%, 更新渲染快133%-内存减少54%2.源码的升级使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking3.拥抱TypeScriptVue3可以更好的支持TypeScript4.新的特性Composition API(组合API)setup配置ref与reactivewatch与watchEffectprovide与inject新的内置组件FragmentTeleportSuspense其他改变新的生命周期钩子data 选项应始终被声明为一个函数移除keyCode支持作为 v-on 的修饰符# vue2配置项与vue3组合式的区别vue2 :配置项APInew Vue({el:'#app',data:{}})vue3: 组合式APIlet name='kiki'let add=()=>{ }

二、Vue3项目创建

1)使用vue-cli创建vue3项目

创建跟之前的vue2一样,只是在选择vue版本的时候选择vue3版本,同样用pycharm打开然后配置好配置项后运行即可。

	vue create 名称		// 选择需要的配置 到版本选择3.X即可	npm run server		// 运行服务器

在这里插入图片描述

在这里插入图片描述


vue3的项目简单解释

	'main.js'import { createApp } from 'vue' # 通过 createApp创建vue实例import App from './App.vue'  # 根组件import router from './router' # vue-routerimport store from './store' #vuexvar vue = createApp(App) # 创建vue实例vue.use(store)#使用vuexvue.use(router)# 使用vue-routervue.mount('#app')# 挂在index.html中得div'其他地方写起来跟之前写vue2完全一致,vue3是兼容的'

2)使用vite创建vue3项目

Vite 是一个轻量级的、速度极快的构建工具,对 Vue SFC 提供第一优先级支持。作者是尤雨溪,同时也是 Vue 的作者!是新建的前端构架工具,最大的优势就是速度快。

在这里插入图片描述

vite使用步骤

	1. 安装---默认最新版npm create vue@latest  // 这个命令可以根据自己的需求选择功能(如vue-router)npm create vite@latest //这个命令没有选择第三方插件2. 在项目中执行npm install 命令 ,虽然vite创建非常快,但是它没有安装依赖,所以需要自己安装一下没有这个node_modules依赖3  运行npm run dev启动项目注意点:4. vueRouter跟之前一样5. Pinia:用来替换Vuex的,新一代的状态管理器

在这里插入图片描述

在这里插入图片描述


三、Setup函数

简化代码和项目的简洁度,vue新增了setup函数。

  • setup为Vue3.0中一个新的配置项,值为一个函数

  • setup是所有Composition API(组合API)编写的位置

  • 组件中所用到的:数据、方法等等,均要配置在setup中

  • setup函数的返回值:返回一个对象,对象中的属性、方法, 在模板中均可以直接使用

  • 注意:
    尽量不要与Vue2.x配置混用

    • Vue2.x配置(data、methos、computed…)中可以访问到setup中的属性、方法。
      但在setup中不能访问到Vue2.x配置(data、methos、computed…)。
      如果有重名, setup优先。

任意一个页面组件看看效果

	<template><div class="home"><h1>Setup函数</h1><hr><p>名字:{{name}}</p><p>年龄:{{age}}</p><button @click="addAge">点击年龄+10</button></div></template><script>export default {name: 'HomeView',setup(){// setup中没有this了// 以后所有的变量定义函数编写,都写在这个函数中// 定义变量 如果这么写,变量渲染没问题,但是没有响应式,页面变了,变量不会变// vue3中,默认是没有响应式的//1.定义变量,跟正常js一样,但是推荐使用let,而不是使用varlet name = 'jack'let age = 18//2.定义函数let addAge = () => {age+=10console.log(age)  //可以发现变量是变了,但是没有响应式}//必须要有返回值,是个对象,返回的对象,可以在模版中使用return {name,age,addAge}}}</script>

在这里插入图片描述


vue2的创建vue实例和vue3创建vue实例的区别

	'Vue2'1.new Vew()--->是Vue的实例,里面有$store,$refs....'Vue3'1.createApp(App)--->是个对象,对象里有东西,没有$store,$refs....等对象,当需要使用直接导入使用2.vue3的<template>,不需要写一个标签了3.定义变量/函数,都写在setup函数中,都要return函数,在<template>才能使用4.但是失去了响应式总结:1.在setup中定义的变量和函数,在之前配置项api中可以直接使用this.变量,函数调用即可2.但是在原来配置项中定义的变量,函数,在setup中无法使用

四、ref和reactive

	1.导入使用:import {ref, reactive} from 'vue'2.基本数据类型(数字,字符串,布尔)如果要加响应式使用ref包裹,在模板中直接读取定义量js中通过对象.value取值3.对象,数组引用使用reactive,ref可以包对象类型,但是用的时候必须.value。操作数据与读取数据:均不需要.value

1)ref函数

  • 作用: 定义一个响应式的数据
  • 语法: const xxx = ref(initValue)
    • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)。
    • JS中操作数据: xxx.value
    • 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>
  • 备注:
    • 接收的数据可以是:基本类型、也可以是对象类型。
    • 基本类型的数据:响应式依然是靠Object.defineProperty()get与set完成的
    • 对象类型的数据:内部 求助 了Vue3.0中的一个新函数—— reactive函数
	<template><div class="home"><h1>Setup函数</h1><hr><h3>ref函数</h3><p>名字:{{name}}</p><p>年龄:{{age}}</p><button @click="addAge">点击年龄+10</button>&nbsp;&nbsp;<button @click="handlerChange('吴彦祖')">点击修改名字</button></div></template><script>import {ref,reactive} from "vue";export default {name: 'HomeView',setup(){let name = ref('jack')let age = ref(18)  //已经不是数字了,是RefImpl的对象//2.定义函数let addAge = () => {age.value+=10console.log(age)	}let handlerChange = (data)=>{name.value = data  //属性.value就可以对属性进行操作console.log(name)}//必须要有返回值,是个对象,返回的对象,可以在模版中使用return {name,age,addAge,handlerChange}}}</script>

在这里插入图片描述


2)reactive函数

  • 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数
  • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)
  • reactive定义的响应式数据是“深层次的”
  • 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作
	<template><div class="home"><h1>Setup函数</h1><hr><h3>reactive函数</h3><p>用户名:{{userinfo.name}}</p><p>年龄:{{userinfo.age}}</p><p>爱好:{{userinfo.hobby[0]}},{{userinfo.hobby[1]}}</p><button @click="handlerClick">点击年龄+1</button></div></template><script>import {ref,reactive} from "vue";export default {name: 'HomeView',setup(){let userinfo=reactive({'name':'oscar','age':23,'hobby':['jump','rap']})let handlerClick = ()=>{userinfo.age++console.log(userinfo)}//必须要有返回值,是个对象,返回的对象,可以在模版中使用return {userinfo,handlerClick}}}</script>

在这里插入图片描述


3)reactive对比ref

	从定义数据角度对比:ref用来定义:基本类型数据reactive用来定义:对象(或数组)类型数据备注:ref也可以用来定义对象(或数组)类型数据, 它内部会自动通过reactive转为代理对象从原理角度对比:ref通过Object.defineProperty()的get与set来实现响应式(数据劫持)。reactive通过使用Proxy来实现响应式(数据劫持), 并通过Reflect操作源对象内部的数据。从使用角度对比:ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value。reactive定义的数据:操作数据与读取数据:均不需要.value。

4)setup的两个注意点

	setup执行的时机在beforeCreate之前执行一次,this是undefined。setup的参数props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性。context:上下文对象attrs: 值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性, 相当于 this.$attrs。slots: 收到的插槽内容, 相当于 this.$slots。emit: 分发自定义事件的函数, 相当于 this.$emit。

五、计算属性与监听属性

1)计算属性(computed函数)

通过绑定ref和rective来编写计算(computed)

	<script>import {ref, reactive,computed} from "vue";export default {name: 'StatsView',setup() {let person = reactive({firstname:'',lastname:'',})//计算属性----》获取值 ,单拎出来写// person.fullName = computed(()=>{//   return person.firstname + person.lastname// })//计算属性----》修改值  //组合使用person.fullName = computed({get(){  //获取 触发它的执行return person.firstname + person.lastname},set(NewValue){  //修改 触发它,传入修改后的值console.log(NewValue)person.firstname = NewValue.substring(0,1)person.lastname = NewValue.slice(1)}})return {person,}},}</script><template><div><h1>计算属性:computed</h1><hr><p>姓:<input type="text" v-model="person.firstname"></p><p>名:<input type="text" v-model="person.lastname"></p><p>全名:{{person.fullName}}</p><p>全名修改:<input type="text" v-model="person.fullName"></p></div></template>

在这里插入图片描述


2)监听属性(watch函数)

	<script>import {ref, reactive,computed,watch} from "vue";export default {name: 'StatsView',setup() {let count = ref(0)let AddCount = ()=>{count.value++}//监听基本类型watch(count,(NewValue,OldValue)=>{console.log(OldValue,NewValue)})//监听对象let userinfo = reactive({name:'jack',age:22})let handlerName=()=>{userinfo.name = '彭于晏'}watch(()=>userinfo.name,(NewValue,OldValue)=>{console.log('名字变更了:'+userinfo.name)})//可以同时监听多个变量/*const sum = ref(100)const msg = ref('很好')watch([sum, msg], (newValue, oldValue) => {console.log('sum或msg变化了', newValue, oldValue)}) */return {person,count,AddCount,userinfo,handlerName}},}</script><template><div><h1>监听属性:watch---基本类型</h1><p>数量:{{count}}</p><button @click="AddCount">点击数量+1</button><hr><h1>监听属性:watch---对象</h1><p>名字:{{userinfo.name}}</p><button @click="handlerName">点击变换名字</button><hr></div></template>

在这里插入图片描述


六、Vue3生命周期

  • Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:
    • beforeDestroy改名为 beforeUnmount
    • destroyed改名为 unmounted
  • Vue3.0也提供了 Composition API 形式的生命周期钩子,与Vue2.x中钩子对应关系如下:
    • beforeCreate===>setup()
    • created=======>setup()
    • beforeMount ===>onBeforeMount
    • mounted=======>onMounted
    • beforeUpdate===>onBeforeUpdate
    • updated =======>onUpdated
    • beforeUnmount ==>onBeforeUnmount
    • unmounted =====>onUnmounted

在这里插入图片描述


七、toRef

  • toRef的作用:创建一个 ref 对象,其value值指向另一个对象中的某个属性。
  • 语法:const name =toRef(person,'name')
  • 应用: 要将响应式对象中的某个属性单独提供给外部使用时。
  • 扩展:toRefstoRef功能一致,但可以批量创建多个ref 对象,语法:toRefs(person)
	<script>import {ref,reactive,toRef,toRefs} from "vue";export default {name:'TorefView.',setup(){let data = reactive({name:'jack',age:22,hobby:'rap'})console.log({...toRefs(data)}) //解压赋值let count = ref(11)return {...toRefs(data),count} //解压赋值,后续写影响}}</script><template><h1>toRef函数</h1><hr><p>名字:{{name}}</p><p>年龄:{{age}}</p><p>爱好:{{hobby}}</p></template>

在这里插入图片描述


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

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

相关文章

苹果最新系统iOS 17的调试和适配方法 - Xcode 14.3.1 真机调试指南

最近苹果发布了iOS 17作为其最新操作系统版本&#xff0c;作为开发者&#xff0c;你可能需要了解如何在Xcode 14.3.1中进行真机调试和适配。本文将为你详细介绍步骤和注意事项。 I. 检查Xcode版本 在开始之前&#xff0c;确保你已经安装了Xcode 14.3.1或更高版本。你可以在Xco…

利用先进的条形码识别和 OCR 技术改善机场行李处理

机场每年处理数百万件行李&#xff0c;主要航空公司每家运输超过 1 亿件行李。每年有 2500 万件行李被错误处理&#xff0c;正确处理至关重要。使用最好的技术是关键&#xff0c;首先是从机场到飞机的正确转乘。 行李分拣 Dynamsoft 的客户是一家机场行李分拣解决方案提供商。…

c语言将csv文件中的XY轴数据转换为html波形图

目标&#xff1a; c语言实现一个最简化的csv转html波形图显示方案。 csv文件格式&#xff1a; 共两行数据&#xff0c;第一行是x轴数据&#xff0c;第二行是y轴数据。 csv文件名分为3段: 波形图名称&#xff0c;x轴名称&#xff0c;y轴名称。 c代码&#xff1a; int csv2html…

HTML5:dialog

JavaScript 练手小技巧&#xff1a;HTML5 的 dialog 标签制作对话框_dialog html-CSDN博客 <dialog id"dialog"> <h2 align"center">修改</h2> <input type"text" id"title1" placeholder"标题" value…

智能小程序小部件(Widget)导航、地图、画布等组件,以及开放能力、原生组件说明

智能小程序小部件(Widget)导航、地图、画布等组件&#xff0c;以及开放能力、原生组件说明。 导航组件 navigator 页面链接&#xff0c;控制小程序的跳转。navigator 子节点的背景色应为透明色。 属性说明 属性名类型默认值必填说明urlstring是跳转地址deltanumber1否当 …

海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(9)

上一节yolov8的训练已经完成了,现在要开始做模型的转换了,这里和yolov7方式相似,但是有一些差异,尤其是yolov7的不带NMS部分的输出顺序和yolov8的输出顺序与格式是有差异的。 首先还是要自己手动加入rpn_op,这里包含了filter,sort,nms部分。 我们一个一个看,首先filter.py…

IDEA 2022.3.3 安装教程

1.下载2022.3.3版本IDEA 链接&#xff1a;https://pan.baidu.com/s/1z-Yfl7fWHgqz8SQLn2-u0g?pwd949u 提取码&#xff1a;949u 2.安装 下载完成后&#xff0c;双击exe安装包&#xff0c; 点击next 3.选择方式3 4.将下面文件复制到任意位置&#xff08;不要有中文路径&…

css 3D立体动画效果怎么转这个骰子才能看到5

css 3D立体动画效果怎么转这个骰子才能看到5 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equ…

鸿蒙使用 axios

1、已安装ohpm&#xff0c;可参考上一篇 2、回到项目的根目录执行 ohpm install ohos/axios 安装成功后&#xff0c;查看项目的package 3、开放网络权限 在模块的module.json5中添加权限 "module": {"requestPermissions": [{"name": "…

黑马苍穹外卖学习Day7

文章目录 缓存菜品实现思路代码开发 缓存套餐Spring Cache入门案例实现思路代码开发 添加购物车需求分析和设计代码开发 查看购物车需求分析代码开发 清空购物车需求分析代码实现 缓存菜品 实现思路 代码开发 Controller层 RestController("userDishController") …

ROS第 6 课 编写简单的订阅器 Subscriber

文章目录 第 6 课 编写简单的订阅器 Subscriber1. 编写订阅者节点2. 测试发布者和订阅者 第 6 课 编写简单的订阅器 Subscriber 订阅器是基于编辑了发布器的基础上创建的&#xff0c;只有发布了消息&#xff0c;才有可能订阅。若未编辑发布器&#xff0c;可前往"ROS第5课 …

FlinkSQL【分组聚合-多维分析-性能调优】应用实例分析

FlinkSQL处理如下实时数据需求&#xff1a; 实时聚合不同 类型/账号/发布时间 的各个指标数据&#xff0c;比如&#xff1a;初始化/初始化后删除/初始化后取消/推送/成功/失败 的指标数据。要求实时产出指标数据&#xff0c;数据源是mysql cdc binlog数据。 代码实例 --SET t…

解决kali beef启动失败解问题

只限于出现这个提示的时候使用 卸载 ruby apt remove ruby 卸载 beef apt remove beef-xss 重新安装ruby apt-get install ruby apt-get install ruby-dev libpcap-dev gem install eventmachine 重新安装beef apt-get install beef-xss 弄完以上步骤如果还是不行就重启kali再试…

LLM之RAG实战(十六)| 使用Llama-2、PgVector和LlamaIndex构建LLM Rag Pipeline

近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;取得了显著的进步&#xff0c;然而大模型缺点之一是幻觉问题&#xff0c;即“一本正经的胡说八道”。其中RAG&#xff08;Retrieval Augmented Generation&#xff0c;检索增强生成&#xff09;是解决幻觉比较有效的…

opencv_角点检测

文章内容 一个opencv检测角点的程序 运行效果 #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>using namespace cv; using namespace std;void detectCorners(M…

数据分析-Pandas如何整合多张数据表

数据分析-Pandas如何整合多张数据表 数据表&#xff0c;时间序列数据在数据分析建模中很常见&#xff0c;例如天气预报&#xff0c;空气状态监测&#xff0c;股票交易等金融场景。数据分析过程中重新调整&#xff0c;重塑数据表是很重要的技巧&#xff0c;此处选择Titanic数据…

多测师肖sir___ui自动化测试po框架(升级)

ui自动化测试po框架&#xff08;升级&#xff09; po框架 一、ui自动化po框架介绍 &#xff08;1&#xff09;PO是Page Object的缩写&#xff08;pom模型&#xff09; &#xff08;2&#xff09;业务流程与页面元素操作分离的模式&#xff0c;可以简单理解为每个页面下面都有一…

【linux】visudo

碎碎念 visudo命令是用来修改一个叫做 /etc/sudoers 的文件的&#xff0c;用来设置哪些 用户 和 组 可以使用sudo命令。并且使用visudo而不是使用 vi /etc/sudoers 的原因在于&#xff1a;visudo自带了检查功能&#xff0c;可以判断是否存在语法问题&#xff0c;所以更加安全 …

7.评价预测模型——C指数,NRI,IDI计算

目录 基本知识 1. C指数 2. NRI、IDI 二分类资料 1. C指数 C指数计算 比较两个模型C指数 2. NRI 3. IDI 生存资料 1. rms包拟合的生存曲线 C指数 比较两个模型的C指数 2. survival包拟合的生存曲线 C指数 NRI计算 IDI 基本知识 1. C指数 C指数&#xff1a; …

stm32 - 基础架构

stm32 - 基础架构 基础架构外设概念系统结构引脚定义晶振工程 基础架构 外设概念 NVIC &#xff08;内核外设&#xff09; SysTick &#xff08;内核外设&#xff09; 其他是片上外设 系统结构 内核引出三条总线 ICode 指令总线&#xff1a; 连接Flash闪存&#xff08;编写的…