初识vue3

2023-11-02

对vue3的理解

  • 2020年9月发布的正式版
  • vue3支持大多数的Vue2的特性
  • Vue中设计了一套强大的组合APi代替了Vue2中的option API,复用性更强了
  • 更好的支持TS
  • 最主要:Vue3中使用了Proxy配合Reflect代替了Vue2中Object.defineProperty()方法实现数据的响应式(数据代理)
  • 重写了虚拟DOM,速度更快了
  • 新的组件:Fragment(片段)/ Teleport(瞬移) / Suspense(不确定)
  • 设计了一个新的脚手架工具,vite

vue3为什么可以使用多个组件,好处是什么

在vue3中:组件可以没有根标签,内部会将多个标签包含在一个Fragment虚拟元素中
好处:减少标签层级,减少内存占用

setup

- setup中的返回值是一个对象,内部的属性和方法是给html模板使用的
- setup中的对象中的方法会和data函数中的都会像中的属性合并为组件对象的方法
- setup不能是一个async函数:因为返回值不再是return的对象,而是promise,模板看不到return对象中的属性数据
 【注意】 在Vue3中尽量不要混合的使用data和setup及methods和setup

参数:props 、context

  • props 是响应式的,当传入新的 prop 时,它将被更新。、

【注意】因为 props 是响应式的,你不能使用 ES6 解构,它会消除 prop 的响应性

如果需要解构 prop,可以在 setup 函数中使用 toRefs 函数来完成此操作

不确定的props属性,用toRef
const title = toRef(props,'title')

  • context 是一个普通的 JavaScript 对象,也就是说,它不是响应式的,这意味着你可以安全地对 context 使用 ES6 解构
// 暴露三个 property
export default {
  setup(props, context) {
    // Attribute (非响应式对象)
    console.log(context.attrs)

    // 插槽 (非响应式对象)
    console.log(context.slots)

    // 触发事件 (方法)
    console.log(context.emit)
  }
}

访问组件的 property

执行 setup 时,组件实例尚未被创建。因此,你只能访问以下 property

  • props
  • attrs
  • slots
  • emit

setup中的this

this是undefined

setup是在beforeCreate生命周期回调之前就执行了,而且就执行一次由此可以推断setup在执行的时候,当前的组件还没有创建出来,也就意味着,组件实例对象this根本就不能使用

ref

  • ref是一个函数:定义一个响应式的数据,返回的是一个ref对象,对中有一个value属性,如果需要对数据进行操作,需要使用ref对象调用value属性的方式进行数据操作

  • html模板中是不需要使用 .value写法的

  • 一般定义一个基本类型的响应式数据,换句话说,ref 为我们的值创建了一个响应式引用

      如果用ref(对象/数组),内部会自动将对象/数组转换为reactive的代理对象
      ref内部:通过给value属性添加getter和setter来实现数据的劫持
    
  • 放到标签上可以用来获取dom <p ref="aaa">得到我</p>

reactive

  • 返回一个返回的是一个proxy代理对象
  • reactive内部:通过Proxy来实现对对象内部所有数据的劫持,并通过Reflect操作对象内部数据

计算属性和监听属性

computed

【注意】 vue3中没有filters,可以用computed和watch代替
两种写法

  • 只读不能修改

     接受一个 getter 函数,并为从 getter 返回的值返回一个不变的响应式 ref 对象。
    
const count = ref(1)
const plusOne = computed(() => count.value + 1)

console.log(plusOne.value) // 2

plusOne.value++ // 错误
  • 可读可修改

    使用具有 get 和 set 函数的对象来创建可写的 ref 对象。
    
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

watch

  - 三个参数
	- 1,可以直接写被监听的值,也可以是返回值的 getter 函数
	- 2, 回调函数,有旧值和新值两个参数
	- 3,一个对象(可选) {immediate: true, deep: true}

与 watchEffect 比较,watch 允许我们:

1, 懒执行副作用;
2,更具体地说明什么状态应该触发侦听器重新运行;
3,访问侦听状态变化前后的值。

监听单个数据源

const num = ref(0)
  watch(
			() => num,
      // 或者直接写 num
      // 当值为复合数据类型时这些值是响应式的,要求它有一个由值构成的副本 
      // 例:nums=reactive([1,2,3,4])    () => [...nums],
			(newValues, prevValues) => {
				console.log(newValues, prevValues)
			}
		)

监听多个数据源

const firstName = ref('');
const lastName = ref('');

watch([firstName, lastName], (newValues, prevValues) => {
  console.log(newValues, prevValues);
})

firstName.value = "John"; // logs: ["John",""] ["", ""]
lastName.value = "Smith"; // logs: ["John", "Smith"] ["John", ""]

watchEffect

const count = ref(0)

watchEffect(() => console.log(count.value))
// -> logs 0

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

-----------副作用,停止侦听,清除副作用,副作用刷新时机,侦听器调试还不懂------------

爷孙级组件传递

provide 进行传递
	inject 进行接收
let color = ref('red')
爷组件 provide{"color":color}
孙组件 inject('color')

响应式数据判断的方法

  • isRef:检测一个值是否为一个ref对象
  • isReactive:检测一个对象是否由reactive创建的响应式代理
  • isReadonly:检测一个对象是否是由readonly创建的制度代理
  • isProxy:检查一个对象是否是由reactive或者readonly方法创建的代理
		console.log(isRef(ref()))    
		console.log(isReactive(reactive({})))
		console.log(isReadonly(readonly({})))
		console.log(isProxy(reactive({})))
		console.log(isProxy(readonly({})))

customRef

创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 track 和 trigger 函数作为参数,并且应该返回一个带有 get 和 set 的对象。

<template>
	<input type="text" v-model="keyword" />
	<h1>{{ keyword }}</h1>
</template>

<script>
import { customRef } from 'vue'
export default {
	setup() {
		// 自定义hook防抖的函数
		function useDebouncedRef(value, delay = 200) {
			// 准备一个存储定时器的id的变量
			let timeOutId
			return customRef((track, trigger) => {
				return {
					get() {
						track()
						return value
					},
					set(newValue) {
						clearTimeout(timeOutId)
						timeOutId = setTimeout(() => {
							value = newValue
							trigger()
							return value
						}, delay)
					},
				}
			})
		}
		const keyword = useDebouncedRef('a11aa', 500)

		return {
			keyword,
		}
	},
}
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初识vue3 的相关文章

  • vue3+Element-plus el-select 下拉选择 多选增加全选封装组件(2023-09-20 TSelect组件新增自定义显示下拉项label)

    2023 09 20 TSelect组件新增自定义显示下拉项label 一 效果图 含适用于条件查询组件中使用 二 参数配置 1 代码示例
  • vue.js -- 事件绑定

    目录 绑定事件 定义事件 直接写表达式 获取事件对象event 获取自定义参数 获取参数和事件对象event 事件绑定多个函数 修饰符 事件修饰符 按键修饰符 鼠标修饰符 精确修饰符 绑定事件 定义事件 代码演示
  • Vue3之watch和watchEffect实战总结

    watch和watchEffect都是vue3中的监听器 但是在写法和使用上是有区别的 主要是介绍一下watch和watchEffect的使用方法以及他们之间的区别 watch 的工作原理 侦听特定的数据源 并在回调函数中执行副作用 它默认
  • Vue3 路由页面切换动画 animate.css

    animate css官网 可以通过以下的内容 来获取自己想要的动态切换样式 1 路由动画transition或者在组件中控制使用animate 安装 npm install animate css 在main ts中引入 import a
  • vue3快速入门-Teleport传送(瞬移组件)

    Vue 的组件架构使我们能够将用户界面构建为能够精美地组织业务逻辑和表示层的组件 Teleporting是Vue 3发布带来的一项新功能 它的灵感来自React Portals 相同的门户是 React 中的一个常见功能 在 Vue2 的
  • Vue3.2中使用swiper实现层叠式轮播图

    介绍 在 vue3 中使用 swiper 实现缩略图的轮播图效果 具体如下图所示 代码
  • vue新一代的状态管理器之pinia

    Pinia 简介 Pinia 是 Vue 新一代的轻量级状态管理库 相当于 Vuex 也是 Vue 核心团队推荐的状态管理库 同时支持 Vue2 和 Vue3 未来很有可能替代 Vuex 比 Vuex 更容易上手 特性 Pinia 具有以下
  • vue3的provide

    provide 和 inject 通常成对一起使用 使一个祖先组件作为其后代组件的依赖注入方 无论这个组件的层级有多深都可以注入成功 只要他们处于同一条组件链上 provide 提供一个值 可以被后代组件注入 inject 注入一个由祖先组
  • vue3+vite 全局组件注册与使用

    前言 vite和我们的webpack是不同的 这里没办法用require 但是他也有自己的引入文件的方法 是 import meta glob 实现效果 vite方法官方入口 功能 Vite 官方中文文档下一代前端工具链https cn v
  • vue3知识点:setup

    文章目录 二 常用 Composition API 1 拉开序幕的setup setup的两个注意点 本人其他相关文章链接 二 常用 Composition API 问题 啥叫 组合式API 答案 请看官方文档 https v3 cn vu
  • 不习惯的 Vue3 起步六 の Echarts绘制下钻地图

    序 看过一些可视化大屏展示地图的例子 准备动手做做 既然要开始比制作 那么先把目标定好 做一个展示中国城市的下钻地图 使用 Vue3 Vite Typescript echarts 实现效果 准备工作 创建项目 因为准备使用Vue3 Vit
  • 微信小程序反编译微信小程序

    微信小程序反编译跳一跳 项目地址 https github com shunyue1320 decompile wx 反编译 wxapkg 文件 微信开发者工具打开
  • Vue3 -- teleport传送门

    目录 teleport传送门 例 蒙层特效 目标效果 代码演示 页面效果 未使用teleport存在的问题 使用teleport实现目标效果 完整代码 总结 teleport传送门 Teleport 是一种能够移动 DOM到Vue根节点之外
  • Vue3 从入门到放弃 (第二篇.创建第一个Web应用)

    上一篇讲到了 Vue3的一些前期准备和环境配置 Vue3 从入门到放弃 第一篇 环境准备 Meta Qing的博客 CSDN博客 今天我们来讲讲 项目结构以及各个文件介绍 并且创建我们第一个WEB应用 我们继续上一篇 创建完工程结构 目录介
  • vue3+ts实现todolist功能

    先看一下实现效果 可以看到内部实现的内容有enter输入 单项删除 全选 以及删除选中项等功能 具体在实现前需要常见有ts的vue3项目 项目创建 具体项目创建 就是 vue create 项目名称 在创建后 选择的时候有vue2和vue3
  • 【Vue3.0实战逐步深入系列】使用elementui组件库element-plus美化投票功能

    千字长文 熬夜更新 原创不易 多多支持 感谢大家 前言 小伙伴们大家好 前面一篇文章中我们利用vue3 0实现了一个超级简单的投票功能 虽然功能是实现了也达到了巩固vue3 0知识点的目的 但是页面没有添加任何样式也没有进行任何的UI设计
  • 【vue3练习 -12】vue3使用readonly(),shallowReadonly()

    作用 把一个响应式 可以是ref定义的 也可以是reactive定义的 的数据变成只读的 不可以修改 使用场景 假如你的组件有个数据 但是你不希望在使用的时候修改他就可以把他变成只读的 用法示例 import readonly shallo
  • vue3使用babel-plugin-import按需引入element-plus

    vue3使用babel plugin import按需引入element plus 2022年6月13日更新 用babel plugin import按需引入element plus会有问题 用官方推荐的方式真香了 以下是链接 https
  • Vue3+Echarts:堆积柱状图的绘制

    一 需求 在Vue3项目中 想用Echarts来绘制堆积柱状图 去展示最近一周APP在不同渠道的登录人数 效果如下 二 实现 关于Echarts的下载安装以及图表的样式设计 此处不展开 1 Templates部分
  • Element-Puls中el-upload组件结合vue-draggable-plus实现上传支持拖拽排序(并保留el-upload原有样式、预览、删除)等功能

    展示效果 需求 需求想要一个可拖拽排序的图片列表 但是发现el upload虽然可以实现照片墙 但是没办法拖拽 实现思路 使用 vue draggable plus 拖拽插件 隐藏Upload原有的已上传文件列表 自定义上传后文件列表的样式

随机推荐

  • 关于Element-ui el-cascader不能rules校验问题

    明明我能打印出选择的值 而且v model也绑定成功了值 用vue devtools扩展程序能看到绑定成功后的值 我的解决方法 自定义表单校验规则 不用 required 属性去校验是否必须验证 用自定义方式去校验 el cascader
  • C、C++、C#、python、java编程—时间与日期操作

    C资料 菜鸟教程 C语言中文网 C community C 资料 菜鸟教程 cplusplus C community C 资料 菜鸟教程 microsoftC 文档 python资料 菜鸟教程 python标准库 Java资料 菜鸟教程
  • iOS开发常用的加密技术

    iOS开发常用的加密技术 我胡汉三又回来了啦 时隔几月没有更博客了 我自己都受不鸟自己啦 在这几个月里经历了很多杂七杂八的事儿 不过话说回来 再怎么忙都不应该中断学习的步伐 再怎么忙都不能成为博客停更的理由 好吧就检讨到这里 开始进入正题
  • 倒计时列表实现(小程序端&Vue)

    rich text主要用来将展示html格式的 可以直接使用这个标签
  • 一、新建AD工程

    pcb主要由四部分组成 原理图库 原理图 pcb库 pcb 1 先新建pcb工程 保存 2 新建原理图库 保存 3 新建原理图 保存 4 新建pcb库 保存 5 新建pcb 保存 6 保存项目 本节完
  • C/C++ 运算符优先级

    原文链接 https blog csdn net skywalker leo article details 6237222 抄写一遍 帮助记忆 注 数字越小优先级越高 关于运算符优先级的两点说明 1 同等级的运算符 运算次序由结合方向来决
  • MCP

    文献名 Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex proximity extension as
  • 华为OD机试 - 高矮个子排队(Java)

    题目描述 现在有一队小朋友 他们高矮不同 我们以正整数数组表示这一队小朋友的身高 如数组 5 3 1 2 3 我们现在希望小朋友排队 以 高 矮 高 矮 顺序排列 每一个 高 位置的小朋友要比相邻的位置高或者相等 每一个 矮 位置的小朋友要
  • BUCK电路

    一 Buck电路原理图 Buck电路 又称降压电路 其基本特征是DC DC转换电路 输出电压低于输入电压 输入电流为脉动的 输出电流为连续的 二 Buck电路工作原理 当开关管Q1驱动为高电平时 开关管导通 储能电感L1被充磁 流经电感的电
  • oracle默认用户名、密码

    一般来说 安装ORACLE时 若没有为下列用户重设密码 则其默认密码如下 用户名 密码 登录身份 说明 sys change on install SYSDBA 或 SYSOPER 不能以 NORMAL 登录 可作为默认的系统管理员 sys
  • pytorch迁移学习载入部分权重

    载入权重是迁移学习的重要部分 这个权重的来源可以是官方发布的预训练权重 也可以是你自己训练的权重并载入模型进行继续学习 使用官方预训练权重 这样的权重包含的信息量大且全面 可以适配一些小数据的任务 即小数据在使用迁移学习后仍然能够保持良好的
  • IE被www.537.com,www.COXDX.INFO劫持,修复~

    一位同事的电脑中IE一直使用265网址导航作首页 这天忽然变成hxxp www COXDX INFO z012了 修改不回来 请我帮忙检修 打开Internet选项 手动修改首页为http www 265 com 但总不能生效 将该电脑中的
  • Qt5学习笔记:Qt两个窗口(Widget)间传递数据

    0x01 原理介绍 Qt两个窗口之间传递数据实际上还是利用了信号与槽的概念来实现 本质上讲 我们只需要实现A窗口发射信号 B窗口槽函数响应信号即可 首先我们在A窗口的头文件中定义发射的信号 signals void sendSignal Q
  • 如何进行网站性能优化?

    分享人 chenxingxing 目录 1 背景介绍 2 知识剖析 3 常见问题 4 解决方案 5 编码实战 6 扩展思考 7 参考文献 8 更多讨论 一 背景介绍 前端优化的目的 1 用户 体验好 2 服务商 节省资源 简而言之 就是在不
  • mq的概念

    1 延迟队列 概念 延迟队列存储的是对应的延迟消息 所谓 延迟消息 是指当消息被发送以后 并不想让消费者立刻拿到消息 而是等待特定时间后 消费者才能拿到这个消息进行消费 应用场景 当你在网上购物的时候是否会遇到这样的提示 十分钟之内未付款
  • SDC时序约束 - create_clock

    在写 sdc约束文件时 要做的第一件事情就是使用create clock对进入FPGA的时钟进行约束 其语法格式如下 create clock add name
  • Ranger配置HDFS报错:curl: (3) [globbing] nested braces not supported at pos 2

    Ambari上显示错误信息 2017 11 06 13 01 00 618 Will retry 65 time s caught exception u Execution of curl location trusted k negot
  • 【Matlab】提取excel中的数据画折线图

    1 前言 在日常数据分析时 将数据保存为xlsx的格式进行存储 本文利用xlsread函数对excel数据进行提取 并利用其数据进行二维图像的绘制 2 excel中数据内容 3 代码 1代表sheet1 pwd xlsread C User
  • 第二周-目录命名规则及用途,文件的元数据,软连接和硬连接

    1 描述Linux发行版的系统目录名称命名规则以及用途 命名规则 文件和目录被组织成一个单根倒置树结构 文件系统从根目录下开始 用 表示 文件名称区分大小写 文件系统分层结构 LSB Linux Standard Base 标准Linux文
  • 初识vue3

    对vue3的理解 2020年9月发布的正式版 vue3支持大多数的Vue2的特性 Vue中设计了一套强大的组合APi代替了Vue2中的option API 复用性更强了 更好的支持TS 最主要 Vue3中使用了Proxy配合Reflect代