深入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全场面试官 文章目录数据的变化反应到视图命令式操…

【BZOJ3894】文理分科

已经连续很久没有当场想出来题了。。。。 $yyb$认为这是一道傻逼题,但是我并不这么认为。。。。 题面 https://www.lydsy.com/JudgeOnline/problem.php?id3894 题解 加点:三叉戟结构的小技巧。 假设割$S$表示不学文,割$T$表示不学理。 对于一…

CodeForces 1131G. Most Dangerous Shark

题目简述&#xff1a;从左到右依次有$n \leq 10^7$个Domino骨牌&#xff0c;高度为$h_i$&#xff0c;手动推倒他的花费为$c_i$。每个骨牌之间的距离为$1$。一个骨牌可以被向左或者向右推倒。当第$i$个骨牌被推倒时&#xff0c;他会以相同方向推倒与其距离$<h_i$的所有骨牌。…

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

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

理解JavaScript中的原型继承(2)

两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客&#xff1a; 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用&#xff0c;其中一篇还有我学习时的错误理解。今天看《Understanding Scopes》这让我从新思考了一下原型继承&…

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

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

前端面试系列-JS 异步编程

并发与并行的区别&#xff1f; 并发是宏观概念&#xff0c;我分别有任务 A 和任务 B&#xff0c;在一段时间内通过任务间的切换完成了这两个任务&#xff0c;这种情况就可以称之为并发。并行是微观概念&#xff0c;假设 CPU 中存在两个核心&#xff0c;那么我就可以同时完成任务…

web前端发展历程

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

修改wordpress上传文件大小限制

1. 登陆wordpress使用的数据库&#xff0c;切换到使用的database 2. 操作如下&#xff1a; > 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

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

Ubuntu 搭建 GitLab 笔记 ***

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

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

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

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

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

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…

打造硬核敲门砖——简历

文章目录 前言打造简历篇幅模板个人信息专业技能工作经历项目经历教育经历个人总结简历格式写在最后前言 作为高校的学生,你是否已经开始设想你以后的工作?作为职场的员工,你是否已经准备更换下一份工作了?不论你现在是什么身份、处于什么阶段,这篇文章都能够帮到你,只要…