【Vue】响应式原理与ref

首先讲讲JS中的Proxy

JavaScript 运行环境包含了一些不可枚举、不可写入的对象属性,然而在 ES5 之前开发者无法定义他们自己的不可枚举属性或不可写入属性。ES5 引入 Object.defineProperty() 方法以便开发者在这方面能够像 JS 引擎那样做。

ES6 为了让开发者能进一步接近 JS 引擎的能力,推出了 Proxy,代理是一种封装,能够拦截并改变 JS 引擎的底层操作。简单的说,就是在目标对象上架设一层 “拦截”,外界对该对象的访问,都必须先通过这层拦截,提供了一种改变 JS 引擎过滤和改写的能力。
Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。

术语

handler
包含捕捉器(trap)的占位符对象,可译为处理器对象。

traps
提供属性访问的方法。这类似于操作系统中捕获器的概念。

target
被 Proxy 代理虚拟化的对象。它常被作为代理的存储后端。根据目标验证关于对象不可扩展性或不可配置属性的不变量(保持不变的语义)。

语法

const p = new Proxy(target, handler)

参数

target
要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。

handler
一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。

方法

Proxy.revocable()
创建一个可撤销的Proxy对象。

举例

const data = {message: "Hello!",longMessage: "Hello! World!",
}const handler = {set(target, key, value) {if (key === "message") {target.longMessage = value + " World!"}target.message = value},
}const proxy = new Proxy(data, handler)proxy.message = "Hello!!!!"console.log(proxy.longMessage)

通过上面的代码,就能实现数据属性的跟踪,更改proxy.message,此时proxy.longMessage也会改变。

Vue通过Proxy包裹data(){}中的属性,属性更改时,触发代理

内置属性ref

用于注册模板引用。

  • 预期string | Function

  • 详细信息

    ref 用于注册元素或子组件的引用。

    使用选项式 API,引用将被注册在组件的 this.$refs 对象里:

    <!-- 存储为 this.$refs.p -->
    <p ref="p">hello</p>
    

    使用组合式 API,引用将存储在与名字匹配的 ref 里:

    <script setup>
    import { ref } from 'vue'const p = ref()
    </script><template><p ref="p">hello</p>
    </template>
    

    如果用于普通 DOM 元素,引用将是元素本身;如果用于子组件,引用将是子组件的实例。

    或者 ref 可以接收一个函数值,用于对存储引用位置的完全控制:

    <ChildComponent :ref="(el) => child = el" />
    

    关于 ref 注册时机的重要说明:因为 ref 本身是作为渲染函数的结果来创建的,必须等待组件挂载后才能对它进行访问。

    this.$refs 也是非响应式的,因此你不应该尝试在模板中使用它来进行数据绑定。

例子

js

const app = Vue.createApp({data() {return {currentUserInput: "",message: "Vue is great!",}},methods: {saveInput(event) {this.currentUserInput = event.target.value},setText() {// this.message = this.currentUserInput;this.message = this.$refs.userText.value// console.dir(this.$refs.userText);},},
})app.mount("#app")

原html

      <input type="text" @input="SaveInput" /><button @click="setText">Set Text</button><p>{{ message }}</p>

修改后的html

     <input type="text" ref="userText" /><button @click="setText">Set Text</button><p>{{ message }}</p>

当你不需要每次敲击按键时将输入值存储为currentUserInput,便可以使用ref内置属性

Vue虚拟Dom

在这里插入图片描述

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

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

相关文章

【C语言】:字符函数和字符串函数

这里写目录标题 1、strlen的使用和模拟实现2、strcpy的使用和模拟3、strcat 的使用和模拟实现4、strcmp 的使用和模拟实现5、strncpy 函数的使用6、strncat 函数的使用7、strncmp函数的使用8、strstr 的使用和模拟实现9、strtok 函数的使用10、strerror 函数的使用11、字符分类…

C语言——关于指针运算的例题分析

1.指针运算中关于 sizeof 和 strlen 的例题分析 1. sizeof(数组名)&#xff0c;这⾥的数组名表⽰整个数组&#xff0c;计算的是整个数组的⼤⼩。 2. &数组名&#xff0c;这⾥的数组名表⽰整个数组&#xff0c;取出的是整个数组的地址。 3. 除此之外所有的数组名都表⽰…

汇编入门--基础知识(1)

1.汇编语言的概念 汇编语言是一种低级编程语言&#xff0c;它与计算机的机器语言非常接近&#xff0c;但比机器语言更易于人类阅读和理解。汇编语言是用一系列的助记符来表示机器语言的操作码和操作数。每种计算机体系结构&#xff08;如x86、ARM等&#xff09;都有自己的汇编语…

12.java openCV4.x 入门-HighGui之图像窗口显示

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

算法刷题Day29 |491.递增子序列、46.全排列、47.全排列 II

目录 0 引言1 递增子序列1.1 我的解题 2 全排列2.1 我的解题 3 全排列 II3.1 我的解题 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;算法刷题Day29 |491.递增子序列、46.全排列、47.全排列 II❣️ 寄语&…

linux安装dubboAdmin

1.环境准备&#xff1a; jdk-8u391-linux-x64apache-maven-3.9.6apache-tomcat-8.5.100 2.安装注册中心zookeeper zookeeper的安装看我的另一篇文章&#xff0c;安装完成后保持启动状态 linux安装Zookeeper的详细步骤-CSDN博客 3.安装dubboadmin 源码下载地址&#xff1a;R…

vue快速入门(十四)reduce求和

注释很详细&#xff0c;直接上代码 新增内容 非嵌套情况求和嵌套情况求和 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale…

C++第十五弹---string基本介绍(一)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、什么是STL 2、STL的版本 3、STL的六大组件 4、STL的重要性 5、如何学习STL 6、STL的缺陷 7、为什么学习string类 7.1、C语言中的字符串…

Google play开发者新手必看:2024最新最全的谷歌上架避坑指南

Google Play作为一个全球性的Android应用分发平台&#xff0c;吸引了无数开发者的目光。据统计&#xff0c;该平台的月活跃用户数已超过20亿&#xff0c;这无疑是一个巨大的市场。 但随着行业的发展&#xff0c;谷歌风控和审核机制不断升级&#xff0c;即便是经验丰富的开发者也…

Nginx配置文件修改结合内网穿透实现公网访问多个本地web站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

抖音评论ID提取工具|视频关键词评论批量采集软件

抖音评论ID提取工具&#xff1a;批量抓取抖音评论 抖音评论ID提取工具是一款功能强大的软件&#xff0c;可以帮助您批量抓取抖音视频下的评论信息。通过输入关键词和评论监控词&#xff0c;即可进行评论的抓取&#xff0c;并提供评论昵称、评论日期、评论内容、命中关键词以及所…

【CSDN活动】人工智能:前沿科技中的创业机遇与挑战

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 人工智能&#xff1a;前沿科技中的创业机遇与挑战一、AI技术的快速发展与应用拓…

QML学习记录:并排页面切换效果的实现

定义一个ApplicationWindow窗口&#xff0c;通过添加SwipeView和PageIndicator来实现页面切换效果和显示当前页面位置的指示器。 ApplicationWindow {id:rootvisible: truewidth: 340height: 480title: qsTr("SwipeView") // 定义一个SwipeView用于页面切换效果 Swip…

Oracle ADG主备切换

文章目录 一、主库切换备库二、备库切换主库三、新备库&#xff08;原主库&#xff09;启用实时日志应用四、新主库切换日志五、查看当前主备库状态 一、主库切换备库 # 查看切换前的状态&#xff0c;确认当前从操作的是主库 select name,open_mode,switchover_status from v$…

无人机倾斜摄影技术在智慧城市中的应用

随着智慧城市的不断发展和完善&#xff0c;新兴热门技术也不断崛起。无人机技术作为其中之一&#xff0c;具有操作简单、应用灵活等优势&#xff0c;受到了各个行业的青睐。现阶段&#xff0c;无人机技术与5G移动通信系统、人工智能系统深度融合&#xff0c;实现了无人机技术的…

LLMs之FreeGPT35:FreeGPT35的简介、安装和使用方法、案例应用之详细攻略

LLMs之FreeGPT35&#xff1a;FreeGPT35的简介、安装和使用方法、案例应用之详细攻略 目录 FreeGPT35的简介 FreeGPT35的安装和使用方法 1、部署和启动服务 Node 2、使用 Docker 部署服务&#xff1a; 运行 Docker 容器以部署服务 使用 Docker Compose 进行更方便的容器化…

抖音视频无水印采集软件|视频关键词批量提取工具

轻松实现抖音视频批量下载&#xff0c;让营销更高效&#xff01; 随着抖音视频在营销领域的日益普及&#xff0c;如何高效地获取并管理大量视频资源成为了市场人员的重要挑战。针对这一需求&#xff0c;我们推出了一款强大的音视频无水印采集软件&#xff0c;帮助您轻松实现批量…

C++笔记:学习使用C++

一.命名空间 namespace 名字 作用&#xff1a;一种用来隔离命名冲突的机制&#xff0c;是C的一项特性 例如&#xff1a; #include<iostream>namespace A {void func_1() {printf("hello world A\n");return ;} }namespace B {void func_1() {printf("hell…

MySQL——查询数据的处理

一、并列 连接两个数据列的值&#xff0c;并进行输出的格式化处理&#xff08;显示为一种统一的格式&#xff09; concat( 列 1 格式化字 符 ) mysql> select concat(vend_name, vend_country) from vendors; --------------------------------- | concat(vend_name, ve…

某211大学src挖掘

信息收集 这次信息收集比较玄学&#xff0c;起初就是用谷歌语法搜了一下带注册功能的点 然后就找到了本次目标站的注册点: 这边的学号啥的我都是不知道的而且这边最后显示的不是注册&#xff0c;显示的是提交所以可以断定注册账号得需要管理员审核信息才能注册&#xff0c;所以…