首页 > 其他分享 >Vue2和Vue3实现响应式原理

Vue2和Vue3实现响应式原理

时间:2023-01-06 22:45:16浏览次数:53  
标签:name person age value 响应 Vue2 propName Vue3 target

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>Document</title>
	</head>
	<body>
		<script type="text/javascript" >
			//源数据
			let person = {
				name:'张三',
				age:18
			}

			//模拟Vue2中实现响应式
			//#region 
			/* let p = {}
			Object.defineProperty(p,'name',{
				configurable:true,
				get(){ //有人读取name时调用
					return person.name
				},
				set(value){ //有人修改name时调用
					console.log('有人修改了name属性,我发现了,我要去更新界面!')
					person.name = value
				}
			})
			Object.defineProperty(p,'age',{
				get(){ //有人读取age时调用
					return person.age
				},
				set(value){ //有人修改age时调用
					console.log('有人修改了age属性,我发现了,我要去更新界面!')
					person.age = value
				}
			}) */
			//#endregion
			
			//模拟Vue3中实现响应式
			//#region 
			const p = new Proxy(person,{
				//有人读取p的某个属性时调用
				get(target,propName){
					console.log(`有人读取了p身上的${propName}属性`)
					return Reflect.get(target,propName)
				},
				//有人修改p的某个属性、或给p追加某个属性时调用
				set(target,propName,value){
					console.log(`有人修改了p身上的${propName}属性,我要去更新界面了!`)
					Reflect.set(target,propName,value)
				},
				//有人删除p的某个属性时调用
				deleteProperty(target,propName){
					console.log(`有人删除了p身上的${propName}属性,我要去更新界面了!`)
					return Reflect.deleteProperty(target,propName)
				}
			})
			//#endregion
		</script>
	</body>
</html>

标签:name,person,age,value,响应,Vue2,propName,Vue3,target
From: https://www.cnblogs.com/orangeczs/p/17031756.html

相关文章

  • 29. 响应式布局
    一、什么是响应式布局  响应式布局就是网页可以根据不同的设备或窗口的大小呈现出不同的效果。使用响应式布局,可以使一个网页适用于所有设备。响应布局的关键就是媒体查......
  • 解析curl的 json 响应 并赋值
    youcanusepython,whichexistsinalllinuxbasedsystems,toparsethejsonforyouhttps://askubuntu.com/questions/714458/bash-script-store-curl-output-......
  • vue3+vite配置多页面
    通过配置多页面应用,从而将给子模块依赖分隔开各自加载,可以减少初始资源的请求,加快页面的访问速度。比如我们有很多H5页面,并且相互独立,比如报修,购卡,计价规则等等,那我们如......
  • vite+vue3项目在chrome中debuger源码
    在vue文件的script中打上一个debugger,本以为可以开心的debugger了,结果控制台看到的是这个样子查了一些方案,这样就可以解决了......
  • 学习笔记——书城项目第六阶段之处理请求响应乱码问题
    2023-01-06一、处理请求响应乱码问题通过过滤器处理乱码问题 请求乱码和响应乱码(1)创建一个"webApplication"项目,命名为“bookstore06”,将"bookstore05"的代码迁移过......
  • vue3+ts利用el-table实现可编辑的表格
    说明在对表格数据进行操作时,如果数据项比较少,可通过自定义实现直接在表格中编辑。界面展示实现要点使用slot来自定义单元格,实现输入、选择等操作使用slot来自定义表......
  • element ui可拖拽dialog-vue2
    文章目录​​1.准备js​​​​1.1`dialog-drag.js`​​​​1.2`index.js`​​​​2.`main.js`引用自定义指令​​​​3.使用​​1.准备js1.1​​dialog-drag.js​​......
  • vue2中的mixin
    1.mixin的用处:主要用于多个组件内存在重复JS业务逻辑(可以包括methods,mounted,watch等等),将该JS部分代码封装在一个js文件下对外暴露,需要使用的组件进行引用。混入(mixin)......
  • 监听input组件的内容改变,并进行实时响应
    监听input组件的内容改变,并进行实时响应危笑演绎总有人要赢的,那为什么不是你?  在开发中,有时我们需要对 input 的 value 值变化作实时响应。......
  • vue3 mock获取数据
    创建api文件夹,在文件夹中创建mockAjax.js,和请求数据的api.js。importaxiosfrom'axios'importnprogressfrom'nprogress'import'nprogress/nprogress.css'const......