深入Vue原理_数据响应式

在这里插入图片描述

欢迎各位小伙伴们!
为大家推荐一款刷题神奇哦 点击链接访问牛客网
各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官

数据响应式

  • 响应式是什么
  • 如何实现数据响应式
  • 实现对象属性拦截
  • 通用的劫持方案
  • 总结
  • 面试法宝
    • 本期推荐

响应式是什么

简而言之就是数据变页面变

如何实现数据响应式

在Javascript里实现数据响应式一般有俩种方案,分别对应着vue2.x 和 vue3.x使用的方式,他们分别是:

  1. 对象属性拦截 (vue2.x)

    Object.defineProperty

  2. 对象整体代理 (vue3.x)

    Proxy

其中对象属性拦截,道理都是相通的

实现对象属性拦截

字面量对象定义

let data = {name:'小兰同学'
}

Object.defineProperty对象定义

let data = {}
Object.defineProperty(data,'name',{// 访问name属性就会执行此方法 返回值就是获取到的值get(){console.log('name属性被获取了')return '小兰同学'},// 设置新值就会执行此方法 newVal就是设置的新值set(newVal){console.log('name属性被设置新值了')console.log(newVal)}
})

我们可以通过 data.name 去获取值,也可以通过 data.name=‘小赵同学’去赋值

存在问题演示

最后获取name值没有被改变
在这里插入图片描述

解决方案

我们可以 通过一个中间变量 _name 来中转get函数和set函数之间的联动

let data = {}
let _name = '小兰同学'
Object.defineProperty(data,'name',{// 访问name属性就会执行此方法 返回值就是获取到的值get(){console.log('name属性被获取了')return _name},// 设置新值就会执行此方法 newVal就是设置的新值set(newVal){console.log('name属性被设置新值了')console.log(newVal)_name = newVal}
})

结果验证

在这里插入图片描述

通用的劫持方案

大家想想看,如果现在有一份已经声明好了数据的对象,我们如何通过劫持的方法把每一个属性都变成setter和getter的形式

下面是一份已经声明好的数据

let data = {name: '小兰同学',age: 18,height:180
}

我们想让里面所有的属性都变成响应式的,并且get和set方法中对于每个属性值的操作是连通的

let data = {name: '小兰同学',age: 18,height:180
}// 遍历每一个属性
Object.keys(data).forEach((key)=>{// key 属性名// data[key] 属性值defineReactive(data,key,data[key])
})
// 响应式转化方法
function defineReactive(data,key,value){Object.defineProperty(data,key,{get(){return value},set(newVal){value = newVal }})
}

结构说明:这个地方实际上使用了闭包的特性,看下图,在每一次的defineReactive函数执行的时候,都会形成一块独立的函数作用域,传入的value 因为闭包的关系会常驻内存,这样一来,每个defineReactive函数中的value 会作为各自set和get函数操作的局部变量

在这里插入图片描述

总结

  1. 所谓的响应式其实就是拦截对象属性的访问和设置,插入一些我们自己想要做的事情
  2. 在Javascript中能实现响应式拦截的方法有俩种,Object.defineProperty方法和Proxy对象代理
  3. 回归到vue2.x中的data配置项,只要放到了data里的数据,不管层级多深不管你最终会不会用到这个数据都会进行递归响应式处理,所以要求我们如非必要,尽量不要添加太多的冗余数据在data中
  4. 需要了解vue3.x中,解决了2中对于数据响应式处理的无端性能消耗,使用的手段是Proxy劫持对象整体 + 惰性处理(用到了才进行响应式转换)

面试法宝

很多伙伴找到我询问面试题,问我针对于前端有没有比较体系化的面试题总结,今天就给大家推荐这款面试法宝
点击链接直达

https://www.nowcoder.com/link/jihexinliang260

就是我们的牛客网,各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本期推荐

算法是学习人工智能的基石,全书通过116个典型范例+86个AI经典算法+40道经典习题+42道面试真题+42个高手点拨+4套算法职位招聘真题+19个项目,用算法解析人工智能,并以Python为工具进行算法思想和解决方案的有效实践。
在这里插入图片描述
本书以零基础讲解为宗旨,详细讲解了常用的人工智能算法,并与实际应用相结合,内容循序渐进,案例丰富翔实,旨在帮助读者掌握人工智能的算法基础。全书分为4篇,共20章。其中第1篇为基础算法篇,从第1章到第9章,主要讲述排序、查找、线性结构、树、散列、图、堆栈等基本数据结构算法;第2篇为机器学习算法篇,从第10章到第14章,主要讲述分类算法、回归算法、聚类算法、降维算法和集成学习算法;第3篇为强化学习算法篇,从第15章到第16章,主要讲述基于价值的强化学习算法和基于策略的强化学习算法;第4篇为深度学习算法篇,从第17章到第19章,主要讲述神经网络模型算法、循环神经网络算法和卷积神经网络算法等内容。本书适合准备从事数据科学与人工智能相关行业的读者。

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

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

相关文章

python scipy样条插值函数大全(interpolate里interpld函数)

scipy样条插值 scipy样条插值1、样条插值法是一种以可变样条来作出一条经过一系列点的光滑曲线的数学方法。插值样条是由一些多项式组成的,每一个多项式都是由相邻的两个数据点决定的,这样,任意的两个相邻的多项式以及它们的导数(不包括仇阶导…

EKS独领风骚

前言 随着公司的逐渐发展,开拓了更加多的子项目与小程序,这些都需要进行宣传,但是管理以及部署新的应用是一个繁琐的工程,部署麻烦而且更新业务的时候非常不方面。尤其面向用户的时候,体验感很差。于是想要使用docker…

Linux进程管理之ps的使用

主题Linux进程管理之ps工具的使用 一ps工具的介绍 ps: process state 进程状态ps - report a snapshot of the current processesLinux系统各进程的相关信息均保存在/proc/PID目录下的各文件中 默认显示的内容很少 [rootcentos65 ~]# psPID TTY TIME CMD2018 pts/0 …

openstack Q版部署-----安装报错问题

1、实例开机提示找不到磁盘Booting from Hard Disk... GRUB. 开启 CPU 虚拟化支持。 将计算节点 nova.conf 配置修改如下即可: [libvirt] cpu_mode none virt_type qemu重启服务 systemctl restart libvirtd.service openstack-nova-compute.service 2、错误: 超过…

深入Vue原理_双向数据绑定(视图/数据)

欢迎各位小伙伴们! 为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官 文章目录数据的变化反应到视图命令式操…

大厂直通车【C认证】踵磅来袭

欢迎各位小伙伴们! 首先为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官 你还在以为CSDN仅仅是一个简简单单…

深入Vue原理_全面剖析发布订阅模式

文章目录发布订阅模式优化优化思路思考理解发布订阅模式(自定义事件)收集更新函数触发更新函数6.5 总结总结写在最后本期推荐欢迎各位小伙伴们! 为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有&a…

web前端发展历程

总览前端发展史前言浏览器的发展史走进前端HTMLCSSjavaScript小前端时代大前端时代写在最后前言 目前在IT公司中前端的岗位越来越成为不可或缺的,前端的地位也愈见明显,很多学校已经体系的传授前端课程,众多培训机构也将前端知识作为了主流课…

修改wordpress上传文件大小限制

1. 登陆wordpress使用的数据库,切换到使用的database 2. 操作如下: > select meta_key from wp_sitemeta; > select meta_key,meta_value from wp_sitemeta where meta_keyfileupload_maxk; 修改为20M: > update wp_sitemeta set meta_value204…

php的符号的排序大小

转载于:https://www.cnblogs.com/cjjjj/p/10433334.html

浅谈 HTTP 和 HTTPS

很多前端伙伴问题有没有体系的面试题? 今天为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官 浅谈 HTTP 和 …

Ubuntu 搭建 GitLab 笔记 ***

简介 GitLab 社区版可以提供许多与 GitHub 相同的功能,且部署在属于自己的机器上,我们会因为网络及其他一些问题而不便使用 GitHub ,这时部署一个 GitLab 是最好的选择。 下载 GitLab 并安装 我的环境是 Ubuntu 16.04 下进行部署操作。 GitLa…

在浏览器输入URL到页面展示发生了什么?

输入URL后查询缓存DNS服务器TCP三次握手HTTP协议包浏览器处理HTML文档TCP 和 UDP 的区别写在最后很多前端伙伴问题有没有体系的面试题? 今天为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有&#…

iOS 高级去水印,涂鸦去水印

目前在研究一下图像的处理,看了一下相关的软件,比如:《去水印大师》,究竟去水印是怎么处理的呢?看图分析。 一共是三个功能:快速去水印、高级去水印、涂鸦去水印 快速去水印:暂时没找到好的处理…

Failed to execute goal maven-gpg-plugin 1.5 Sign

问题描述&#xff1a; 解决办法&#xff1a;跳过maven-gpg-plugin <build> <pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><configuration&g…

一文搞懂this指向

前言 那你说一下 js 中的 this 指向吧&#xff01;这句话已经成为面试官口中的高频面试题&#xff0c;作为前端开发的我们&#xff0c;你真的搞懂了 this 指向了吗&#xff1f;快来跟我一起来查漏补缺吧&#xff01;通过几个小案例让大家更能直白的理解 this 指向。 很多前端伙…

难怪大家丢掉了postman而选择 Apifox

前言 当下采用前后端分离模式开发Web应用已经成为气候&#xff0c;在开发阶段有一个不成文的规定则是 项目开发后端先行 但是作为前端开发工程师的我们&#xff0c;难道在搭建完页面后只能等待后端的接口么&#xff1f;这样的话我们则完全被后端开发限制住了。在前面跟大家介绍…

mvc 模式和mtc 模式的区别

首先说说Web服务器开发领域里著名的MVC模式&#xff0c;所谓MVC就是把Web应用分为模型(M)&#xff0c;控制器(C)和视图(V)三层&#xff0c;他们之间以一种插件式的、松耦合的方式连接在一起&#xff0c;模型负责业务对象与数据库的映射(ORM)&#xff0c;视图负责与用户的交互(页…

HP LaserJet MFP M227_M231双面打印

双面打印设置 转载于:https://www.cnblogs.com/xiexiaokui/p/9261577.html

万木成林,我种了“Vue技能树”

初衷 作为Vue技能树的构建者&#xff0c;一直拖延到现在才来写这篇文章&#xff0c;主要还是心里没有底&#xff0c;前面殊不知这颗“树”是否促进了大家学习的热情&#xff0c;也不知它给大家带来了多少收获。说到我们的Vue技能树&#xff0c;我作为尤大大的忠实粉丝自就业后…