当前位置: 首页 > news >正文

vue3.0学习笔记(二)——生命周期与响应式数据(ref,reactive,toRef,toRefs函数)

1. 组合API-setup函数

使用细节:

  • setup 是一个新的组件选项,作为组件中使用组合API的起点。
  • 从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行
  • 这就意味着在setup函数中 this 还不是组件实例,this 此时是 undefined
  • 在模版中需要使用的数据和函数,需要在 setup 返回(return)。

2. 生命周期

2.1 回顾vue2.x生命周期钩子函数

  • beforeCreate
  • created——实例创建,能获取data, 不能获取真实DOM,一般用于发起Ajax请求
  • beforeMount
  • mounted——可以获取真实DOM
  • beforeUpdate
  • updated——当数据发生变化并更新页面后执行,获取更新后的DOM
  • beforeDestroy
  • destroyed——手动消除计时器/定时器/全局事件

2.2 认识vue3.0生命周期钩子函数

  • setup 创建实例前
  • onBeforeMount 挂载DOM前
  • onMounted 挂载DOM后
  • onBeforeUpdate 更新组件前
  • onUpdated 更新组件后
  • onBeforeUnmount 卸载销毁前
  • onUnmounted 卸载销毁后

总结: 组合API的生命周期钩子有7个,可以多次使用同一个钩子,执行顺序和书写顺序相同。

3. ref() 函数

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

定义响应式数据:

  • ref函数,常用于简单数据类型定义为响应式数据
    • 再修改值,获取值的时候,需要.value
    • 在模板中使用ref申明的响应式数据,可以省略.value

语法:

  • 从 vue 包中导入 ref 函数        import { ref } from 'vue'

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

使用场景:

  • 当你明确知道需要的是一个响应式数据对象,那么就使用 reactive 即可
  • 其他情况使用ref

4. reactive() 函数

  • 作用:接受对象类型数据的参数传入并返回一个响应式的对象响应式对象是 JavaScript 代理,其行为就和普通对象一样。(Proxyreactive() 返回的是一个原始对象的 Proxy,它和原始对象是不相等的。
  • 定义响应式数据:

    • reactive是一个函数,它可以定义一个复杂数据类型,成为响应式数据。
    • 通常是用来定义响应式对象数据

语法:

  • 从 vue 包中导入 ref 函数        import { reactive } from 'vue'

  • 在 setup 中执行 reactive 函数并传入初始值,使用变量接收 reactive 函数的返回值

5. ref()与reactive()函数的理解

  • reactive和ref函数的共同作用是什么 ?
    • 用函数调用的方式生成响应式数据
  • reactive vs ref
    • reactive不能处理简单类型的数据
    • ref参数类型支持更好但是必须通过.value访问修改 ​​​​​​​
    • ref函数的内部实现依赖于reactive函数
  • 在实际工作中推荐使用哪个?
    • 推荐使用ref函数,更加灵活统一

理解:

        ref 和 reactvie 都是生成响应式数据的方法。ref 可以用于简单类型的数据和复杂类型的数据,生成的是响应式对象(RefImpl);而 reactive 只能用于对象,且生成的代理响应式对象(Proxy)。通过 ref 生成的响应式对象(RefImpl).value之后的值,其实就是通过 reactive 生成的代理响应式对象(Proxy)。

推荐:以后申明数据,统一使用 ref => 统一了编码规范

6. toRef() 函数

  • 作用:toRef 是函数,转换响应式对象某个属性为单独响应式数据,并且值是关联的
  • 语法:

    • 从 vue 包中导入 toRef 函数        import { toRef } from 'vue'

    • toRef (响应式对象, 响应式对象中的某个属性)

使用场景:有一个响应式对象数据,但是模版中只需要使用其中一项数据。

7. toRefs() 函数

  • 作用:toRefs() 是函数,转换响应式对象中所有属性为单独响应式数据,并且值是关联的。
  • 语法:
    • 从 vue 包中导入 toRefs 函数        import { toRefs } from 'vue'
    • toRefs (响应式对象)

8. 案例

基本步骤:

  • 记录鼠标坐标
    • 定义一个响应式数据对象,包含x和y属性。
    • 在组件渲染完毕后,监听document的鼠标移动事件
    • 指定move函数为事件对应方法,在函数中修改坐标
    • 在setup返回数据,模版中使用
  • 累加1功能
    • 定义一个简单数据类型的响应式数据
    • 定义一个修改数字的方法
    • 在setup返回数据和函数,模板中使用
<template><div><div>鼠标的坐标为:</div><p>x:{{ x }}</p><p>y:{{ y }}</p><hr><div>{{ count }}</div><button @click="add">+ 1</button></div>
</template><script>
import { onMounted, reactive, onUnmounted, toRefs, ref } from 'vue'
// 功能1:记录鼠标坐标
// 定义一个响应式数据对象,包含x和y属性。
// 在组件渲染完毕后,监听document的鼠标移动事件
// 指定move函数为事件对应方法,在函数中修改坐标
// 在setup返回数据,模版中使用export default {setup () {// 1. 定义一个响应式数据对象,包含x和y属性。const mouse = reactive({x: 0,y: 0})// 3. 指定move函数为事件对应方法,在函数中修改坐标const move = (e) => { mouse.x = e.pageXmouse.y = e.pageY}// 2. 在组件渲染完毕后,监听document的鼠标移动事件onMounted(() => {document.addEventListener('mousemove',move)})//  4. 组件销毁时,移除事件onUnmounted(() => {document.removeEventListener('mousemove',move)})// 功能2:数字加 1 const count = ref(0)const add = () => {count.value += 1}return {...toRefs(mouse),count,add}}
}
</script><style></style>

相关文章:

vue3.0学习笔记(二)——生命周期与响应式数据(ref,reactive,toRef,toRefs函数)

1. 组合API-setup函数 使用细节&#xff1a; setup 是一个新的组件选项&#xff0c;作为组件中使用组合API的起点。从组件生命周期来看&#xff0c;它的执行在组件实例创建之前vue2.x的beforeCreate执行。这就意味着在setup函数中 this 还不是组件实例&#xff0c;this 此时是…...

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网&#xff0c;在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载&#xff0c;因为服务器在国外&#xff0c;国内不支持&#xff0c;所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…...

掌握互联网路由选择协议:从基础入门到实战

文章目录 路由选择协议的基本概念路由选择算法的分类分层次的路由选择协议路由信息协议&#xff08;RIP&#xff09;内部网关协议&#xff1a;OSPF外部网关协议&#xff1a;BGP互联网中的实际应用总结 互联网的路由选择协议是网络通信的核心&#xff0c;它决定了数据包如何在网…...

[笔记]ONVIF服务端实现[进行中...]

1.文档搜索&#xff1a; 从&#xff1a;https://www.cnblogs.com/liwen01/p/17337916.html 跳转到了&#xff1a;ONVIF协议网络摄像机&#xff08;IPC&#xff09;客户端程序开发&#xff08;1&#xff09;&#xff1a;专栏开篇_onvif 许振坪-CSDN博客 1.1原生代码支持&…...

深度强化学习 ②(DRL)

参考视频&#xff1a;&#x1f4fa;王树森教授深度强化学习 前言&#xff1a; 最近在学习深度强化学习&#xff0c;学的一知半解&#x1f622;&#x1f622;&#x1f622;&#xff0c;这是我的笔记&#xff0c;欢迎和我一起学习交流~ 这篇博客目前还相对比较乱&#xff0c;后面…...

线性代数重要知识点和理论(下)

奇异值分解 奇异值分解非常重要且有趣。首先对于 n n n\times n nn对称矩阵 A A A&#xff0c;可以通过对角化得到其对角化形式 A P D P − 1 APDP^{-1} APDP−1&#xff0c;但是如果 A A A不是对称矩阵或者不是方阵&#xff0c;则不能进行对角化&#xff0c;但是可以通过奇…...

独立开发者系列(35)——python环境的理解

新手阶段&#xff0c;为了快速入门&#xff0c;基本都是直接开始写python代码实现自己想要的效果&#xff0c;类似搭建博客&#xff0c;写个web服务器&#xff0c;搭建简易聊天室&#xff0c;偶尔也写些爬虫&#xff0c;或者使用pygame写个简单小游戏&#xff0c;也有tk库做点简…...

中小企业常见的网络安全问题及防范措施

在数字化浪潮的推动下&#xff0c;我国中小企业的信息化建设取得了显著成就。然而&#xff0c;随着网络安全形势的日益严峻&#xff0c;中小企业在网络安全方面的短板逐渐暴露出来。本文将从中小企业网络安全现状出发&#xff0c;深入剖析其存在的问题&#xff0c;并提出针对性…...

Android 线程并发:线程通信:Handler机制

文章目录 API源码分析操作总结 API Handler相关 Handler对象.sendMessage(Message) 发送消息 Handler对象.handleMessage()空方法 自定义Handler重写handleMessage方法&#xff0c;处理Message Looper相关 Looper.getMainLooper() 获取App的UI线程的Looper对象 Looper…...

搭建自己的金融数据源和量化分析平台(三):读取深交所股票列表

深交所的股票信息读取比较简单&#xff1a; 看上图&#xff0c;爬虫读取到下载按钮的链接之后发起请求&#xff0c;得到XLS文件后直接解析就可以了。 这里放出深交所爬虫模块的代码&#xff1a; # -*- coding: utf-8 -*- # 深圳交易所爬虫 import osimport pandas as pd imp…...

企业级视频拍摄与编辑SDK的全面解决方案

视频已成为企业传播信息、展示品牌、连接用户的重要桥梁&#xff0c;如何高效、专业地制作高质量视频内容&#xff0c;成为众多企业面临的共同挑战。美摄科技&#xff0c;作为视音频技术领域的创新先锋&#xff0c;以其强大的视频拍摄与编辑SDK&#xff0c;为企业量身打造了一站…...

后端返回列表中包含图片id,如何将列表中的图片id转化成url

问题描述 如果我有一个列表数据&#xff0c;列表中每个对象都包含一个图片id&#xff0c;现在我需要将列表中的图片id转化成图片&#xff0c;然后再页面上显示出来 如果你有一个列表数据&#xff0c;列表中每个对象都包含一个图片 ID&#xff0c;并且你想将这些图片 ID 转化为…...

Python学习笔记44:游戏篇之外星人入侵(五)

前言 上一篇文章中&#xff0c;我们成功的设置好了游戏窗口的背景颜色&#xff0c;并且在窗口底部中间位置将飞船加载出来了。 今天&#xff0c;我们将通过代码让飞船移动。 移动飞船 想要移动飞船&#xff0c;先要明白飞船位置变化的本质是什么。 通过上一篇文章&#xff0…...

export在linux中的作用

在某些项目中常常使用export命令。该命令的作用是设置环境变量&#xff0c;并且该环境变量为当前shell进程与其启动的子进程共享。 export MODEL_NAME"stable-diffusion-v1-4"比如以上命令&#xff0c;如果不采用export&#xff0c;设置的变量仅在当前shell命令/进程…...

FFmpeg解复用器如何从封装格式中解析出不同的音视频数据

目录 1、ffmpeg介绍 2、FFMPEG的目录结构 3、FFmpeg的格式封装与分离 3.1、数据结构 3.2、封装和分离(muxer和demuxer) 3.2.1、Demuxer流程 3.2.2、Muxer流程 4、总结 4.1、播放器 4.2、转码器 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续…...

测试-常见问题

目录 1、测试报告中有哪些内容? 2、如何保证用例的覆盖度 3、测试用例和测试脚本的关系 4、Android和iOS测试的区别 5、小程序和App测试的区别 6、Web和App测试的区别 7、Alpha和Beta测试的区别 8、测试计划包括哪些? 9、Jmeter 、 monkey 10、设计用例的考虑点 …...

RSA非对称加密算法(Java实现)

废话不多说&#xff0c;直接上代码 public class RSAService {private static final String RSA "RSA";private static final String PUBLIC_KEY "xxx";private static final String PRIVATE_KEY "xxx";public static void main(String[] ar…...

netty构建http服务器

Netty 是一个高性能的异步事件驱动的网络应用框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。要使用 Netty 搭建一个支持 HTTP 方法&#xff08;GET, POST, PUT, DELETE&#xff09;的 HTTP 服务器&#xff0c;可以按照以下步骤进行操作。 准备工作 添加依赖…...

Docker中安装Kafka和Kafka UI管理界面

Kafka 简介 Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流应用。它最初由LinkedIn开发,并于2011年开源,之后成为Apache项目的一部分。Kafka的核心概念和功能包括: 发布与订阅消息系统:Kafka允许用户发布和订阅消息流。高吞吐量:Kafka能够处理大量数…...

防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份、还原和抓包

防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份、还原和抓包 &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&…...

Prompt-Builder:开源提示词工程框架,让AI交互从玄学变科学

1. 项目概述&#xff1a;一个为AI时代量身定制的提示词工程利器如果你和我一样&#xff0c;深度使用过ChatGPT、Claude、Midjourney这类大模型&#xff0c;那你一定有过这样的体验&#xff1a;面对一个复杂任务&#xff0c;你精心构思的提问&#xff0c;换来的却是一个平庸甚至…...

【AI Agent革命性突破】:3大本质差异击穿传统自动化认知盲区,90%工程师至今未察觉

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent与传统自动化的本质分水岭 决策机制的根本差异 传统自动化依赖预设规则与确定性流程&#xff08;如 cron 任务、RPA 脚本&#xff09;&#xff0c;其执行路径在部署时即完全固化&#xff1b;而…...

OpenAshare:开源AI应用平台的设计理念与实战指南

1. 项目概述&#xff1a;一个开源的AI应用分享与协作平台最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫“OpenAshare”。光看名字&#xff0c;你大概能猜到它和“分享”有关&#xff0c;但它的野心远不止于此。这不是一个简单的代码仓库&#xff0c;而…...

Node.js API错误处理库设计:标准化响应与中间件实践

1. 项目概述&#xff1a;为什么我们需要一个专门的API错误处理库&#xff1f;如果你写过一段时间的后端服务&#xff0c;尤其是基于RESTful或GraphQL的API&#xff0c;肯定对下面这种场景不陌生&#xff1a;客户端发来一个请求&#xff0c;你的服务因为某种原因&#xff08;比如…...

【Sora 2正式版深度解析】:20年AI架构师亲测的5大颠覆性功能与企业落地避坑指南

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Sora 2正式版发布背景与核心定位 OpenAI 于2024年第三季度正式发布 Sora 2&#xff0c;标志着文本到视频生成技术从实验性原型迈入工业级应用新阶段。该版本并非简单迭代&#xff0c;而是基于超大规模时…...

【Midjourney商业设计变现指南】:20个已验证的高转化落地场景与客户签约话术库

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney商业设计变现的核心逻辑与验证框架 Midjourney 不是单纯的图像生成工具&#xff0c;而是连接创意需求、交付效率与商业闭环的智能设计协作者。其核心变现逻辑建立在“提示词工程 品牌资产沉…...

代码评审可视化图谱:从Diff到Graph的工程实践与实现

1. 项目概述&#xff1a;当代码评审遇上可视化图谱在团队协作开发中&#xff0c;代码评审&#xff08;Code Review&#xff09;是保障代码质量、促进知识共享的关键环节。然而&#xff0c;传统的代码评审流程&#xff0c;尤其是在处理大型、复杂的变更集&#xff08;Change Set…...

运行软件时提示找不到VCRUNTIME140_1.dll

运行软件时提示找不到VCRUNTIME140_1.dll前言解决办法说明参考前言 我们将cpp程序打包之后,放到别的电脑上,新电脑可能会提示: 运行软件时提示找不到VCRUNTIME140_1.dll 解决办法 根据电脑的型号,选择性的安装64位和32位的,如果你不懂电脑,那两个全都安装即可. https://aka.…...

LinkSwift:高效解锁八大网盘直链下载的完整实用指南

LinkSwift&#xff1a;高效解锁八大网盘直链下载的完整实用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

CISP认证报考必看:从考完到出分、查证、续证一文说清

今天&#xff0c;这篇主要关于CISP出成绩、查成绩和有效期的干货&#xff0c;今天结合官方规则和常见情况说清楚&#xff0c;省得大家瞎等。一、CISP是什么&#xff1f;报考条件如何&#xff1f;在深入流程之前&#xff0c;先简单说下CISP的定位。CISP由中国信息安全测评中心&a…...