Vue响应式原理基本理解实现[通俗易懂]

Vue响应式原理基本理解实现[通俗易懂]Vue响应式原理基本实现:注意:不要认为数据发生改变,界面跟着更新,是理所当然的.我们需要弄懂两个问题:1.修改Vue实例数据,vue内部是如何监听数据的改变?2.当数据发生改变,Vue是如何知道要通知那些界面发生刷新?问题一解决:根据Object.defineProperty来监听对象属性的改变Object.defineProperty基本使用#1.先创建一…

大家好,又见面了,我是你们的朋友全栈君。

注意: 不要认为数据发生改变,界面跟着更新, 是理所当然的.

我们需要弄懂两个问题:

1. 修改Vue实例数据,vue内部是如何监听数据的改变
2. 当数据发生改变,Vue是如何知道要通知那些界面发生刷新

问题一解决:

根据 Object.defineProperty来监听对象属性的改变

Object.defineProperty 基本使用

# 1.先创建一个Obj属性
# 相当于给 new Vue() 中的data设置属性
const obj = { 
   
	name: 'Vistuous',
	message: 'Hello Vue.Js'
}

# 2.循环Obje
Object.keys[obj].forEach(key => { 
   
	let value = obj[key]
	# 监听值的改变
	Object.defineProperty(obj, key, { 
   
		set(newValue) { 
   
			console.log(key + '发生了变化' )
			value = newValue
			# 通知订阅者 -> 看第二个解决
			dep.notify()
		},
		# 谁使用了, 就会进入 get
		get() { 
   
			console.log(key + '对应的值: ' + value)
			return value
		}
	})
})

结果:
结果
我们会发现修改name值或者使用name值的时候, Object.defineProperty 会监听到, 那么第一个问题 修改Vue实例数据,vue内部是如何监听数据的改变? 已经解决了。
那么问题来了,Vue是如何知道要通知那些界面发生刷新? 也就是说:Vue是如何知道谁在使用?如何告诉它需要更新? 回到第二个问题。

第二个问题解决

使用发布者订阅者模式 来完成通知发生刷新

## 创建订阅者
class Watcher { 
   
  constructor(name) { 
   
    this.name = name
  }
  update() { 
   
    console.log(this.name + '发生了update')
  }
}

# 创建发布者
class Dep { 
   
	# 储存订阅者
	constructor() { 
   
		this.subs[] 
	}
	# 添加订阅者信息
	addSubs(watcher) { 
   
		this.subs.push(watcher)
	},
	# 循环所有订阅者, 通知他们需要更新
	notify() { 
   
	   	this.subs.forEach(item => { 
   
	    	item.update()
	    })
	}
}

# 使用
# 创建发布者
const dep = new Dep()
# 创建订阅者
const watcher1 = new Watcher('index')
const watcher2 = new Watcher('profile')
# 将订阅者传给发布者
dep.addSubs(watcher1)
dep.addSubs(watcher2)
// 通知订阅者
dep.notify()

合并使用结果打印:
在这里插入图片描述
会发现每当修改一个数据的时候,发布者模式会通知所有订阅者来进行更新。
Vue响应式图解
在这里插入图片描述
图片素材来源coderwhy老师 coderwhy老师简书

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137899.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月5日 下午10:40
下一篇 2022年5月5日 下午11:00


相关推荐

  • 软件测试缺陷报告单怎么填,缺陷报告(缺陷报告怎么写)[通俗易懂]

    软件测试缺陷报告单怎么填,缺陷报告(缺陷报告怎么写)[通俗易懂]报告软件测试错误的目的是为了保证修复错误的人员可以重复报告的错误,从而有利于分析错误产生的原因,定位错误,然后修正之。因此,报告软件测试错误的基本要求。。1.首先要做一个“标题党”(此标题党非彼标题党)。标题一定要清晰简洁易理解,。[Product][Version]_[Feature]_[Title],这样描述会很清晰,也方便查找3.缺陷的标题一。。测试报告是对BUG的统计,计划的实施,后…

    2025年11月26日
    6
  • Java IO层次体系结构[通俗易懂]

    Java IO层次体系结构[通俗易懂]在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了   JavaI/O主要包括如下几个层次,包含三个部分:   1.流式部分――IO的主体部分;  2.非流式…

    2022年6月5日
    67
  • 苹果哪款手机无刘海_刘海屏是什么意思

    苹果哪款手机无刘海_刘海屏是什么意思用iPhone这么多年你们用过iPodTouch吗?在iPhone4发布的时候我接触过一次iPodTouch,当时是同事买的超薄的,感觉就是为打游戏制造的,(本人热爱游戏)那时候感觉真…

    2022年8月10日
    11
  • 御用导航提示提醒_又现神操作!广西两车主开车走楼梯,车主:导航让我走的!…[通俗易懂]

    御用导航提示提醒_又现神操作!广西两车主开车走楼梯,车主:导航让我走的!…[通俗易懂]大家有没有被导航坑坏的经历?近日柳州市某小区内有两辆小轿车跟着导航走结果都开到了同一楼梯处卡在了同样的地方……2月12日上午,在柳州市柳江区柳西新城小区,一司机开车跟着导航走,结果将车子开到楼梯上了。据网友描述,事故发生在该小区31栋平台上,一辆红色小轿车的四个车轮都在楼梯上,走下楼梯直达小区门口。随后,司机用其他车子把他的汽车拉起来,自己也没有受伤。无独有偶此前就发生过一样的事…

    2022年5月7日
    172
  • vmware 桥接模式下与虚拟机互ping不通问题-终极解决办法

    vmware 桥接模式下与虚拟机互ping不通问题-终极解决办法寻寻觅觅 在百度找了好几个月 一直没有解决 你没有看错 确实是好几个月 最终 google 了十分钟不到解决了本文目的 解决 ping 不通桥接虚拟机的问题废话不多说 先说解决办法 1 防火墙禁 ping 导致 关闭虚拟机 物理主机防火墙再试一下即可 或开启 icmp 访问 2 桥接的物理网卡不对解决办法选中桥接模式 更改下面的 桥接到 默认为 自动 改为自

    2026年3月20日
    3
  • 人工智能Agent怎么理解:从概念到实践的完整解读指南

    人工智能Agent怎么理解:从概念到实践的完整解读指南

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号