Vue3-组合式Api(重点)

news2024/11/23 15:13:32

 阅读文章你可以收获的知识

1.知道setup语法糖的使用和如何实现的

2.知道在vue3中如何定义响应式数据

3.知道在vue3中如何定义一个计算属性(computed)

4.知道如何在vue3中使用watch来监听数据

5.知道在vue3如何实现父子通信

6.知道vue3如何使用ref函数来获取元素

7.知道在vue3中如何使用provide和inject来跨层级共享数据

setup选项

写法

<script>
  export default {
    setup(){
      
    },
    beforeCreate(){
      
    }
  }
</script>

执行时机:在beforeCreate函数之前

setup中写代码的特点

在setup函数中写的数据和方法需要在末尾以对象的方式return,才能给模版使用

 

<script setup>语法糖

script标签添加 setup标记,不需要再写导出语句,默认会添加导出语句

<script setup>语法糖原理

语法糖的本质:将原本需要自己手动导出的操作进行了封装,底层仍然也是需要return数据

注意点:

  1 set函数的执行时机比beforeCreate还要早

  2 在set函数中this还没有被初始化成功,获取不到this(this是undefined)

  3 数据和函数需要在setup的最后return返回才可以使用(不使用语法糖时)

 reactive和ref函数

1. reactive

作用:接受对象类型数据的参数传入并返回一个响应式的对象

<script setup>
 // 导入
 import { reactive } from 'vue'
 // 执行函数 传入参数 变量接收
 const state = reactive({
   msg:'this is msg'
 })
 const setSate = ()=>{
   // 修改数据更新视图
   state.msg = 'this is new msg'
 }
</script>

<template>
  {{ state.msg }}
  <button @click="setState">change msg</button>
</template>

2. ref

作用:接收简单类型或者对象类型的数据传入并返回一个响应式的对象

步骤:

1. 从 vue 包中导入 ref 函数  

2. 在 <script setup> 中执行 ref 函数并传入初始值,使用变量接收 ref 函数的返回值

本质:是在原有传入数据的基础上,外层包了一层对象,包成了复杂类型

//    底层,包成复杂类型之后,再借助 reactive 实现的响应式

//    注意点:

//    1. 脚本中访问数据,需要通过 .value

//    2. 在template中,.value不需要加 (帮我们扒了一层)

<script setup>
 // 导入
 import { ref } from 'vue'
 // 执行函数 传入参数 变量接收
 const count = ref(0)
 const setCount = ()=>{
   // 修改数据更新视图必须加上.value
   count.value++
 }
</script>

<template>
  <button @click="setCount">{{count}}</button>
</template>

3.reactive 对比 ref

相同点:都是用来生成响应式数据

不同点:

        reactive不能处理简单类型的数据

        ref参数类型支持更好,但是必须通过.value做访问修改

        ref函数内部的实现依赖于reactive函数

在实际工作中的推荐

        推荐使用ref函数,减少记忆负担,小兔鲜项目都使用ref

 computed

计算属性基本思想和Vue2保持一致,组合式API下的计算属性只是修改了API写法

在vue3中使用函数 computed()来定义计算属性

watch

侦听一个或者多个数据的变化,数据变化时执行回调函数,俩个额外参数 immediate控制立刻执行,deep开启深度侦听

1. 侦听单个数据

2. 侦听多个数据

侦听多个数据,第一个参数可以改写成数组的写法

3. immediate

在侦听器创建时立即出发回调,响应式数据变化之后继续执行回调

4. deep

通过watch监听的ref对象默认是浅层侦听的,直接修改嵌套的对象属性不会触发回调执行,需要开启deep

生命周期函数

1. 选项式对比组合式

2. 生命周期函数基本使用

  1. 导入生命周期函数

  2. 执行生命周期函数,传入回调

3. 执行多次

生命周期函数执行多次的时候,会按照顺序依次执行

父子通信

1. 父传子(defineProps)

基本思想

  1. 父组件中给子组件绑定属性

  2. 子组件内部通过props选项接收数据

注意点:这里需要注意的时接收函数时,我们不能像原先vue2那样,直接使用props关键字来接收函数,而是使用defineProps 编译器宏 来接收数据

2. 子传父(defineEmits)

基本思想

  1. 父组件中给子组件标签通过@绑定事件

  2. 子组件内部通过 emit 方法触发事件

注意点:这里需要注意的时接收函数时,我们不能像原先vue2那样,直接使用emit关键字来通知父组件,而是使用defineEmits 编译器宏 来接收数据

模版引用(获取dom对象)

概念:通过 ref标识 获取真实的 dom对象或者组件实例对象

1. 基本使用

实现步骤:

  1. 调用ref函数生成一个ref对象

  2. 通过ref标识绑定ref对象到标签

2. defineExpose

默认情况下在 <script setup>语法糖下组件内部的属性和方法是不开放给父组件访问的,可以通过defineExpose编译宏指定哪些属性和方法容许访问说明:指定testMessage属性可以被访问到  

provide和inject(跨层级共享数据)

1. 作用和场景

顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信

2. 跨层传递普通数据

实现步骤

  1. 顶层组件通过 provide 函数提供数据

  2. 底层组件通过 inject 函数提供数据

3. 跨层传递响应式数据

在调用provide函数时,第二个参数设置为ref对象

4. 跨层传递方法

顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件的数据

 

<script setup>
import CenterCom from '@/components/center-com.vue'
import { provide, ref } from 'vue'

// 1. 跨层传递普通数据
provide('theme-color', 'pink')

// 2. 跨层传递响应式数据
const count = ref(100)
provide('count', count)

setTimeout(() => {
  count.value = 500
}, 2000)

// 3. 跨层传递函数 => 给子孙后代传递可以修改数据的方法
provide('changeCount', (newCount) => {
  count.value = newCount
})

</script>

<template>
<div>
  <h1>我是顶层组件</h1>
  <CenterCom></CenterCom>
</div>
</template>



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

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

相关文章

苍穹外卖学习-----2024/02/21

1.新增员工 /*** 处理SQL异常* param sqlIntegrityConstraintViolationException* return*/ExceptionHandlerpublic Result exceptionHandler(SQLIntegrityConstraintViolationException sqlIntegrityConstraintViolationException){//String message sqlIntegrityConstraintV…

JS实现根据数组对象的某一属性排序

JS实现根据数组对象的某一属性排序 一、冒泡排序&#xff08;先了解冒泡排序机制&#xff09;二、根据数组对象的某一属性排序&#xff08;引用sort方法排序&#xff09; 一、冒泡排序&#xff08;先了解冒泡排序机制&#xff09; 以从小到大排序为例&#xff0c;冒泡排序的原…

2.20日学习打卡----初学Vue3

2.20日学习打卡 目录: 2.20日学习打卡Vue是什么&#xff1f;安装vue模板语法条件渲染列表渲染事件处理表单输入绑定组件基础Props组件交互自定义事件组件交互组件生命周期Vue引入第三方Axios网络请求Axios网络请求封装网络请求跨域解决方案路由配置路由传递参数嵌套路由配置Vue…

面向对象编程入门:掌握C++类的基础(1/3)

面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。在C中&#xff0c;类是创建对象的蓝图。本文将介绍类的基本概念&#xff0c;帮助初学者理解如何在C中使用类来实现面向对象编程。 ​​​​​​​ 1. 类的引入 在深入探讨类的…

【专利】专利缴费清单与汇款金额不一致的处理方法

缴纳专利年费时&#xff0c;很容易算错滞纳金。比如有个专利年费滞纳金应交690&#xff0c;结果我算成了660&#xff0c;报给财务转账660。第二天补录缴费信息时&#xff0c;汇款金额660&#xff0c;然后缴费清单填写总是690无法修改&#xff0c;导致无法进行下一步&#xff01…

Python 写网络监控

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 网络监控是保障网络可靠性的一项重要任务。通过实时监控网络性能&#xff0c;我们可以及时发现异常&#xff0c;迅速采取措施&#xff0c;保障网络畅通无阻。本文将以 Python为工具&…

云性能监控有着至关重要的作用

随着云计算的蓬勃发展&#xff0c;云性能监控成为保障云应用顺畅运行的不可或缺的一环。本文将介绍云性能监控的主要作用&#xff0c;以便更好地理解为什么它对于云环境中的应用程序至关重要。 1. 实时性能反馈 云性能监控提供了对应用程序性能的实时反馈。通过监测关键性能指标…

压缩感知的图像仿真(MATLAB源代码)

压缩感知是一种用于高效获取和表示信号的技术&#xff0c;它可以显著减少数据的采样和传输量&#xff0c;同时保持对信号的高质量恢复能力。在压缩感知中&#xff0c;信号被表示为其在一个稀疏基中的稀疏线性组合。通过仅使用少量的随机投影测量&#xff0c;就能够捕捉信号的大…

区块链之光:揭秘Web3时代的创新契机

随着技术的不断演进&#xff0c;区块链技术正逐渐引领着数字化时代的新潮流。Web3作为区块链技术的核心&#xff0c;为我们带来了前所未有的创新契机。本文将深入揭秘Web3时代的创新契机&#xff0c;探讨区块链之光如何改变我们的世界。 1. 区块链技术的兴起 区块链技术作为一…

springcloud:1.Eureka详细讲解

Eureka 是 Netflix 开源的一个服务注册和发现工具,被广泛应用于微服务架构中。作为微服务架构中的核心组件之一,Eureka 提供了服务注册、发现和失效剔除等功能,帮助构建弹性、高可用的分布式系统。在现代软件开发领域,使用 Eureka 可以有效地管理和监控服务实例,实现服务之…

1660s部署ChatGLM3-6B

用Chatgpt一段时间了&#xff0c;最近在想有没有离线可以装在本机的chatgpt&#xff0c;这样哪天openai把咱们渠道堵得死死的之后&#xff0c;咱们还有东西可用。网上一搜还真有&#xff0c;比如这个ChatGLM3&#xff0c;我用的就是ChatGLM3-6B。 ​​​​​​​官网有详细的部…

鸿蒙视频播放器,主要包括视频获取和视频播放功能:

鸿蒙视频播放器&#xff0c;主要包括视频获取和视频播放功能&#xff1a; 1 获取本地视频或者网络视频。 2 通过media.createAVPlayer创建播放器AVPlayer&#xff0c;然后进行视频播放。 3 通过VideoController进行AVPlayerState的状态管理&#xff0c;如开始&#xff0c;停止&…

Dom节点继承树基本操作

遍历节点树 基于元素节点树的遍历 parcntElcrmcnt -> 返回当前元素的父元秦节点 (IE不兼容)children ->只返回当前元素的元素子节点node.childFlement(ount nodechildren.length当前元素节点的子元素(IE不兼容)firstElementChild->返回的是第一个元素节点(IE不兼容)l…

ONLYOFFICE编辑器升级大揭秘:v8.0版新特性实测与评价

ONLYOFFICE编辑器升级大揭秘&#xff1a;v8.0版新特性实测与评价 一个人简介二前言三操作步骤创建房间我的文档 四开发人员工具应用程序接口Javascript开发工具包插件SDK网络钩子 五测评总结六体验地址 一个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作…

探索亚信安慧AntDB的数据库管理之道

AntDB数据库管理系统以其卓越的性能和稳定性成为众多用户的选择之一。这款系统采用了影响力大、社区繁荣、开放度高、生态增长迅速的PG内核&#xff0c;为用户提供了稳定可靠的数据库解决方案。 数据库的稳定性对于用户来说至关重要&#xff0c;特别是在面对大规模数据处理和高…

机房预约系统(个人学习笔记黑马学习)

1、机房预约系统需求 1.1系统简介 学校现有几个规格不同的机房&#xff0c;由于使用时经常出现“撞车“现象,现开发一套机房预约系统&#xff0c;解决这一问题。 1.2身份简介 分别有三种身份使用该程序 学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账…

用Jmeter对数据库执行压力测试

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

HarmonyOS—LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内&#xff0c;在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器&#xff1a;LocalStorageProp和LocalS…

Redis之缓存雪崩问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 锁2. 不同的过期时间3. 缓存预热和定时任务 一、书接上文 Redis之缓存穿透问题解决方案实践SpringBoot3Docker 二、介绍 缓存雪崩&#xff0c;指大量的缓存失效&#xff0c;大量的请求又同时落在数据库。主要的一种诱因是key设…

接口请求重试的8种方法

转载文章&#xff1a;https://blog.csdn.net/qq_34162294/article/details/134131439 文章目录 1.前言2.几种方法 2.1循环重试2.2 使用Spring Retry库 2.2.1 添加 Maven 依赖2.2.2 添加 EnableRetry 注解启用重试功能2.2.3 在需要重试的方法上添加 Retryable 注解2.2.4. 还可以…