Vue3中是如何实现数据响应式示例详解

 更新时间:2023年07月13日 08:40:21   作者:土豆  
这篇文章主要介绍了Vue3中是如何实现数据响应式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

副作用函数

指的是会产生副作用的函数;

JavaScript
let val = 1;//全局变量
function effect() {
  val = 2; //修改全局变量,产生副作用
}

effect函数执行时,对全局变量val产生了副作用,改变了其值。

响应式数据

const obj = {text:"hello world"};
function effect(){
  //effect函数的执行读取obj.text
  document.body.innerHTML = obj.text;
}
obj.text = "hello Vue.js";

上面的副作用函数effect会设置bodyinnerText属性,其值为obj.text,第6行代码又修改了text的值,期望副作用函数重新执行,如果能实现这个目标,那么对于obj就是响应式数据。

如何才能让obj变成响应式数据呢?通过观察我们发现了两点线索:

▪当副作用函数effect执行时,会触发字段obj.text读取操作;

▪当修改obj.text的值时,会触发字段obj.text设置操作;

如果能够拦截obj对象的读取设置操作,事情就迎刃而解了。当读取字段obj.text时,我们可以把副作用函数存储到一个“”中。

当设置obj.text时,再把副作用函数effect从“桶”里取出并执行。

按照上面的思路,使用Proxy来实现:

//创建一个副作用函数的桶
 const bucket = new Set();
 //原始数据
 const data = { text: "hello world" };
 //对原始数据的代理
 const obj = new Proxy(data, {
   //拦截读取操作
   get(traget, key) {
     //将副作用函数effect添加到副作用函数的桶中
     bucket.add(effect);
     //返回属性值
     return traget[key];
   },
   //拦截设置操作
   set(traget, key, newValue) {
     //设置属性值
     traget[key] = newValue;
     //把副作用函数从桶中取出来并执行
     bucket.forEach((fn) => fn());
     //返回true代表设置操作成功
     return true;
   },
 });

测试用例:

function effect() {
    document.body.innerHTML = obj.text;
  }
  effect();
  setTimeout(() => {
    obj.text = "hello vue3";
  }, 1000);

目前的实现数据响应式还存在很多缺陷,比如副作用函数的名字是写死的,后续再完善响应式系统。

以上就是Vue3中是如何实现数据响应式的详细内容,更多关于Vue3数据响应式的资料请关注脚本之家其它相关文章!

相关文章

  • vue引入外部的js文件的10种方法总结

    vue引入外部的js文件的10种方法总结

    这篇文章主要为大家详细介绍了vue项目中引入外部的js文件的10种方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考下
    2023-08-08
  • vue中使用better-scroll实现滑动效果及注意事项

    vue中使用better-scroll实现滑动效果及注意事项

    这篇文章主要介绍了vue中使用better-scroll实现滑动效果,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • 深入探索Vue中样式绑定的七种实现方法

    深入探索Vue中样式绑定的七种实现方法

    在 Vue.js 开发中,合理地控制元素的样式对于构建高质量的用户界面至关重要,Vue 提供了灵活的方式来绑定样式,这篇文章将探索 Vue 中设置样式的七种做法,并结合代码,逐步说明每种方法的实现,需要的朋友可以参考下
    2024-03-03
  • Vue.js处理API请求失败的最佳实践和策略

    Vue.js处理API请求失败的最佳实践和策略

    在现代Web开发中,与后端API的交互是不可避免的,然而,网络请求是不稳定的,可能会因为各种原因失败,因此,优雅地处理API请求失败的情况是提升用户体验和应用稳定性的关键,本文将详细介绍在Vue.js中处理API请求失败的最佳实践和策略,需要的朋友可以参考下
    2024-12-12
  • vue3下eslint配置方式

    vue3下eslint配置方式

    这篇文章主要介绍了vue3下eslint配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Vue实现DOM元素拖放互换位置示例

    Vue实现DOM元素拖放互换位置示例

    本文主要介绍了Vue实现DOM元素拖放互换位置示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • vue通过watch对input做字数限定的方法

    vue通过watch对input做字数限定的方法

    本篇文章主要介绍了vue通过watch对input做字数限定的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Vue axios 跨域请求无法带上cookie的解决

    Vue axios 跨域请求无法带上cookie的解决

    这篇文章主要介绍了Vue axios 跨域请求无法带上cookie的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 如何解决vue项目打包后文件过大问题

    如何解决vue项目打包后文件过大问题

    这篇文章主要介绍了如何解决vue项目打包后文件过大问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 使用vue3搭建后台系统的详细步骤

    使用vue3搭建后台系统的详细步骤

    这篇文章主要介绍了使用vue3搭建后台系统的过程记录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论