Vue3 第二节 Vue3的响应式

这篇具有很好参考价值的文章主要介绍了Vue3 第二节 Vue3的响应式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Vue3的响应式原理

2.ref函数和reactive函数的对比

3.setup注意点

一.Vue3的响应式原理

1.Vue2.x中的响应式原理

① 实现原理

  • 对象类型:通过Object.defineProperty() 对属性的读取,修改进行拦截(数据劫持)
  • 数组类型:通过重写更新数据的一系列方法来实现拦截,对数组变更方法进行包裹

② 存在问题

  • 新增属性,删除属性,界面不会更新
  • 直接通过下标修改数组,界面不会自动更新

2.Vue3.x的响应式原理

① 实现原理

  • 通过Proxy(代理):拦截对象中任意属性的变化,包括对属性的读写,属性的添加,属性的删除
  •  通过Reflect(反射):对源对象的属性进行操作
    const p = new Proxy(person, {
      get (target, propName) {
        console.log('读取', target, propName)
        return Reflect.get(target, propName)
      },
      set (target, propName, value) {
        console.log('修改', value)
        return Reflect.set(target, propName, value)
      },
      deleteProperty (target, propName) {
        return Reflect.deleteProperty(target, propName)
      }
    })

二.ref函数和reactive函数的对比

① 从定义数据的角度

  • ref用来定义:基本类型数据
  • reactive用来定义:对象(数组)数据类型
  • ref也可以用来定义对象(或数组)类型的数据,它内部会自动通过reactive转为代理对象

② 从原理角度对比

  • ref通过Object.defineProperty()的get与set来实现响应式(数据劫持)
  • reactive通过使用Proxy来实现响应式(数据劫持),并通过Reflect操作元对象内部的数据

③ 从使用角度对比

  • ref定义的数据:操作数据需要.value,读取模板的时候模板中直接读取,不需要用.value
  • reactive定义的数据,操作数据与读取数据均不需要.value

三.setup使用两个注意点

  • setup执行的时机:在beforeCreate之前执行一次,this是undefined,  setup中不能使用this
  • setup的参数

Vue3 第二节 Vue3的响应式,前端学习,Vue,前端,vue.js 

① props:值为对象,包含组件外部传递过来,且组件内部声明接收了的属性

Vue3 第二节 Vue3的响应式,前端学习,Vue,前端,vue.js

Vue3 第二节 Vue3的响应式,前端学习,Vue,前端,vue.js

 Vue3 第二节 Vue3的响应式,前端学习,Vue,前端,vue.js

② context:上下文

  •  attrs:值为对象,包含组件外部传递过来,但没有在props配置中声明的属性,相当于this.$attrs
  • slots:收到的插槽内容,相当于this.$slots
  • emit:分发自定义事件的函数,相当于this.$emit

 文章来源地址https://www.toymoban.com/news/detail-632703.html

 

到了这里,关于Vue3 第二节 Vue3的响应式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 前端(四)——vue.js、vue、vue2、vue3

    前端(四)——vue.js、vue、vue2、vue3

    😊博主:小猫娃来啦 😊文章核心: vue.js、vue、vue2、vue3从全局到局部 Vue.js是一款流行的JavaScript框架 vue,vue2,vue3都是vue.js的不同版本。 Vue:Vue.js的第一个版本,也称为Vue 1.x。它于2014年首次发布,并获得了广泛的应用和认可。 Vue2:Vue.js的第二个版本,也称为Vue 2.x。它在Vu

    2024年02月12日
    浏览(13)
  • Vue2项目练手——通用后台管理项目第二节

    Vue2项目练手——通用后台管理项目第二节

    路由重复跳转会出现bug 解决路由重复bug问题: 使用的组件 图片 CommonHeader.vue 文件目录 store/index.js store/tab.js main.js CommonHeader.vue CommonAside.vue Main.vue

    2024年02月10日
    浏览(29)
  • 前端css + js +vue +element-ui 实现响应式布局,根据浏览器窗体大小自动响应

    我的环境是element-ui vue版的,其他的也可以,主要是css和js的内容 首先在data中定义一个对象 其实就是css的样式,不过放在了js 里面而已 这里css设置了两个属性 一个是transform 这个属性对div标签的缩放作用,当浏览器窗口或者屏幕大小改变时,就调整这个属性的值,来等比缩放

    2024年02月13日
    浏览(15)
  • 前端HTML、CSS、JS、VUE3 汇总

    前端HTML、CSS、JS、VUE3 汇总

    学习https://developer.mozilla.org/zh-CN/docs/Learn/CSS 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 使用VS Code运行前端代码 在VS Code上安装前端插件 正在更新中~ ✨ 提示:这里可以添加本文要记录的大概内容: 学习路线 知识定位 HTML基础 标签、表格、表单、

    2024年02月13日
    浏览(35)
  • 【Vue学习笔记5】Vue3中的响应式:ref和reactive、watchEffect和watch

    【Vue学习笔记5】Vue3中的响应式:ref和reactive、watchEffect和watch

    所谓响应式就是界面和数据同步,能实现实时更新。 Vue 中用过三种响应式解决方案,分别是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。 vue3中实现响应式数据的方法是使用ref和reactive。 reactive更推荐去定义复杂的数

    2024年02月03日
    浏览(12)
  • 【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus

    【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus

    gogo code 是一个基于 AST (源代码的抽象语法结构树状表现形式)的 JavaScript/Typescript/HTML 代码转换工具,可以用它来构建一个代码转换程序来帮助自动化完成如框架升级、代码重构、多平台转换等工作。 当前 GoGoCode 支持解析和操作如下类型的代码: ○JavaScript(JSX) ○Typescript

    2024年02月12日
    浏览(16)
  • 前端开发攻略---从源码角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章让你彻底弄懂响应式原理。

    前端开发攻略---从源码角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章让你彻底弄懂响应式原理。

    Vue的响应式到底要干什么? 无非就是要知道当你 读取 对象的时候,要知道它读了。要做一些别的事情 无非就是要知道当你 修改 对象的时候,要知道它改了。要做一些别的事情 所以要想一个办法, 把读取和修改的动作变成一个函数 ,读取和修改的时候分别调用对应的函数

    2024年04月17日
    浏览(22)
  • 前端学习笔记(14)-Vue3组件传参

    前端学习笔记(14)-Vue3组件传参

    1.props(父组件传递给子组件) 1.1 实现 如果你没有使用 script setup,props 必须以 props 选项的方式声明,props 对象会作为 setup() 函数的第一个参数被传入: 在子组件中: 在父组件中: 一个组件可以有任意多的 props,默认情况下,所有 prop 都接受任意类型的值。 这种情况下,我

    2024年01月21日
    浏览(17)
  • 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等

    答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 答: 不要在计算属性中进行异步请求或者更改DOM 不要直接修改computed的值 区别: 计算属性值基于其响应式依赖被缓存,意思就是只要他之前的依赖不发生变化,那么调用他只会返回之前缓

    2024年02月11日
    浏览(31)
  • vue报错:Uncaught SyntaxError: Unexpected token <;也就是前端的js请求响应数据是html格式的原因和解决方法

    “Uncaught SyntaxError: Unexpected token lt;” 错误通常出现在浏览器的开发者工具(console)中,它表示在解析 JavaScript 代码时遇到了意外的 字符。这个错误通常是由以下几种情况引起的: 代码中的 被错误地识别为 HTML 标签的开始:这通常发生在在引用外部 JavaScript 文件时,浏览器

    2024年02月07日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包