初识vue3

对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) // 2plusOne.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 0setTimeout(() => {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 timeOutIdreturn customRef((track, trigger) => {return {get() {track()return value},set(newValue) {clearTimeout(timeOutId)timeOutId = setTimeout(() => {value = newValuetrigger()return value}, delay)},}})}const keyword = useDebouncedRef('a11aa', 500)return {keyword,}},
}
</script>

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

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

相关文章

选轻量应用服务器or云服务器ECS?一图帮你彻底区分

简介&#xff1a;轻量应用服务器适合轻量级且访问量低的应用场景&#xff0c;更适合个人开发者、对新手小白更友好&#xff1b;而云服务器ECS可覆盖全业务场景&#xff08;如大数据分析&#xff0c;深度学习等&#xff09;&#xff0c;要求用户有一定的开发技术能力。 本文首发…

js实现shallowReactive和reactive

// shallowReactive(浅的监视&#xff0c;浅的劫持&#xff0c;浅的响应式数据)与reactive&#xff08;深的&#xff09;// 定义一个reactiveHandler处理对象 let reactiveHandler {// 获取属性值get(target, prop) {// 这里的result返回1const result Reflect.get(target, p…

宜搭小技巧|一招摆脱纸质表单,数据收集更便捷

简介&#xff1a;开启「应用公开访问」&#xff0c;组织外成员也可提交数据。 许多公司在前台都会准备一个访客登记表&#xff0c;供来访者填写。但如果来访者数量较多&#xff0c;就会出现这样的问题…… 提供纸质表单供访客填写信息&#xff0c;使用起来繁琐且费时&#xff…

如何用 Serverless 低成本打造个人专属网盘?

简介&#xff1a;想要做个网盘不知如何开始&#xff0c;不妨花3分钟读读这篇&#xff0c;看看如何借助 Serverless &#xff0c;低成本的做一个“不限制网速、无限扩展、同时支持数百种文件格式在线预览、编辑、协作”的专属个人 & 家庭网盘~ 前言 随着全球大数据不断增长…

云之后,亚马逊云科技要为业界提供水和空气一样的安全防护

云巨头亚马逊云科技&#xff0c;正在持续加码云安全。 编辑 | 宋慧 出品 | CSDN云计算 提到亚马逊云科技&#xff0c;我们首先想到的是它在云领域的计算存储等技术和优势。不过亚马逊云科技却连续四年在举办它的全球安全大会 re:Inforce&#xff0c;刚刚 &#xff0c;2022 re:…

即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?

简介&#xff1a;开发者在选择使用 Serverless 时&#xff0c;仍会有开发和部署困难、厂商锁定等诸多担忧&#xff0c;有没有一种支持 Serverless 应用全生命周期管理的开发者工具&#xff0c;能够简单快速上手并真正帮助我们提升研发、运维的效能的呢&#xff1f; 破局&#x…

NBF事件中心架构设计与实现

简介&#xff1a;NBF是阿里巴巴供应链中台的基础技术团队打造的一个技术PaaS平台&#xff0c;她提供了微服务FaaS框架&#xff0c;低代码平台和中台基础设施等一系列的PaaS产品&#xff0c;旨在帮助业务伙伴快速复用和扩展中台能力&#xff0c;提升研发效能和对外的商业化输出。…

常用的git指令

命令行常用命令&#xff08;在git bash上生效&#xff0c;部分在cmd无用&#xff09; pwd (print working directory) 查看当前所在路径–绝对路径cd(change directory) 切换目标ls(list) 查看当前目录下的内容mkdir(make directory) 创建目录touch 创建文件cat 查看文件内容&…

关于“算力”,这篇文章值得一看

作者 | 小枣君来源 | 鲜枣课堂今天这篇文章&#xff0c;我们来聊聊算力。这两年&#xff0c;算力可以说是ICT行业的一个热门概念。在新闻报道和大咖演讲中&#xff0c;总会出现它的身影。那么&#xff0c;究竟到底什么是算力&#xff1f;算力包括哪些类别&#xff0c;分别有什么…

宜搭小技巧|找不到应用怎么办?群应用一键直达

简介&#xff1a;5步学会「一键添加群应用」&#xff01; 上期钉多多将Excel一键转应用后&#xff0c;大大提高了同学们的工作效率&#xff0c;于是小伙伴们纷纷用钉钉宜搭创建了各种各样的应用&#xff0c;那么新的问题产生了...... 每次提交数据都要切换到工作台找到对应的…

前端实现多文件编译器

简介&#xff1a;在前端工程中&#xff0c;有时我们需要在浏览器编译并执行一些代码&#xff0c;这种需求常见于低代码场景中。例如我们在搭建时需自定义一部分代码&#xff0c;这些代码需要在渲染时执行。为了方便起见&#xff0c;我们写的代码一定是 ES6 语法&#xff0c;如果…

3个月夯实基建,鲜丰水果这样实现研发数字化

简介&#xff1a;3个月夯实基建&#xff0c;鲜丰水果这样实现研发数字化。简单、快速地提升产研团队的交付质量和交付效率&#xff0c;成为了支持组织业务创新的必选项。让我们一起看看鲜丰究竟如何逐步破局。 鲜丰水果&#xff0c;创始于1997年&#xff0c;历经25年发展史的鲜…

打通源码,高效定位代码问题|云效工程师指北

简介&#xff1a;为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作&#xff0c;云效代码团队在大数据和智能化方向进行了一系列的探索和实践&#xff08;例如代码搜索与推荐&#xff09;&#xff0c;本文主要介绍我们如何通过直接打通源代码来提高研发与运…

Nreal中国AR眼镜发布会:正式推出Nreal X和Nreal Air 售价2299元起

2022年8月23日&#xff0c;全球领先的消费级AR眼镜品牌Nreal在京召开中国首场AR眼镜发布会&#xff0c;面向中国市场正式推出三款硬件产品&#xff0c;其中包括两款AR眼镜&#xff1a;全球首款眼镜形态、探索增强现实技术无限场景应用的全功能AR眼镜——Nreal X&#xff1b;全新…

大数据时代下的App数据隐私安全

简介&#xff1a;随着信息技术快速发展&#xff0c;大数据为我们带来信息共享、便捷生活的同时&#xff0c;还存在着数据安全问题&#xff0c;主流商业模式下APP面临新的挑战。工信部持续开展APP侵权整治活动&#xff0c;进行了了六批次集中抽检&#xff0c;检查了76万款APP&am…

react知识总结

react是什么 用于动态构建用户界面的javaScript库 &#xff08;只关注视图&#xff09; react是谁开发的 由Facebook开发&#xff0c;且开源。 react的优点 1、高效&#xff0c;使用虚拟DOM优秀的Diff算法&#xff0c;尽量减少与真实DOM的交互 2、组件化开发 3、声明式编码…

基于 Mesh 的统一路由在海外业务的实践

简介&#xff1a;本文主要介绍我们最近在利用 Service Mesh 架构解决海外业务问题中一些实践和价值探索。我们在海外业务引入 Mesh 架构过程中&#xff0c;充分利用 Istio 的基于 yaml 来描述和定义路由的抽象能力&#xff0c;制定了企业流量治理标准&#xff0c;并将集团海外业…

中国RISC-V机遇与变革下,赛昉科技发布两款高性能新品

8月23日&#xff0c;专注于RISC-V芯片研发的赛昉科技举办2022新产品发布会&#xff0c;发布两款重磅新品&#xff1a;全球首款量产高性能RISC-V多媒体处理器——昉惊鸿7110&#xff08;JH7110&#xff09;&#xff0c;和全球性能最高的量产RISC-V单板计算机——昉星光 2&#x…

小米电商 Apache Dubbo-go 微服务实践

简介&#xff1a;2021 年是小米中国区电商部门变动调整较大的一年&#xff0c;小米中国区早期电商、服务体系建立在 Go 语言构建的微服务体系之上&#xff0c;由内部自研的 Go 语言微服务框架 koala 支撑起数以千计的微服务应用。随着业务的发展&#xff0c;新零售体系的成立以…

sass的使用方法

sass的优缺点 优点&#xff1a;css预处理器为css增加一些编程的特性&#xff0c;无需考虑浏览器的兼容性问题。支持嵌套、变量和逻辑等。可以让css更加简介、提高代码复用性、逻辑分明等等。 缺点&#xff1a;css的文件体积和复杂度不可控&#xff1b;增加了调试难度和成本 常用…