什么是响应式数据?
所谓的响应式数据就是说,数据发生改变的时候,视图会重新渲染,匹配更新为最新的值。
vue2的响应式数据式是基于ES5的Object.defineProperty实现的,而vue3的响应式数据是基于ES6的Proxy来实现的。
下面我们基于ES6中的Proxy来实现一个非常基本的数据响应的功能。
完整代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>test</title> <script type="text/javascript"> //定义一个Set用于保存副作用函数 const bucket=new Set(); //定义一个数据对象 const data={text:'hello world'}; //定义一个副作用函数修改body显示的文本 function effect(){ document.body.innerText=obj.text; } //定义一个Proxy对象 用于拦截读取和获取数据的操作 const obj=new Proxy(data,{ //拦截读取操作 get(target,key){ bucket.add(effect); return target(key); }, //拦截修改操作 set(target,key,newVal){ target[key]=newVal; bucket.forEach(fn=>fn()); return true; } }); //运行副作用函数 effect(); //设置定时器 一秒钟以后修改body的文本为hello vue2 setTimeout(()=>{ obj.text="hello vue3"; },1000); </script> </head> <body> </body> </html>
运行效果:
刚打开页面
一秒钟之后修改了对象的数据之后,页面也会同时修改:
0条评论
点击登录参与评论