【Vue3】通过实例,理解 Vue3 的响应式设计

Vue3 详细教程及实例(完整版) 文本插值 属性绑定 调用函数 全局访问 指令 论点 动态参数 声明反应状态ref() 简化用法 DOM 更新完成nextTick() 响应式对象reactive() 反应式代理与原始代理 数组和集合的注意事项 在模板中展开时的注意事项 计算属性 计算缓存与方法 可写计算 绑定 HTML 类 绑定到数组 带组件 绑定到对象 多重价值 条件渲染 列表渲染 监听事件 内联处理程序 方法处理程序 方法与在线检测 调用内联处理程序中的方法 访问内联处理程序中的事件参数 事件修饰符 按键修饰 阅读详情

⭐️ 本文首发自 前端修罗场(点击加入),是一个由资深开发者独立运行的专业技术社区,我专注 Web 技术、答疑解惑、面试辅导以及职业发展。现在加入,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见,交个朋友,不走弯路,少吃亏!


响应式指的是变量(如:数组、字符串、数字、对象等)在其值或它引用的任何其他变量在声明后发生更改时更新的能力。

在本文中,我们将研究 Vue 中的响应式设计,它是如何工作的,以及我们如何使用新创建的方法和函数来创建响应式变量。

默认情况下,JavaScript 不是响应式的。 这意味着如果我们创建变量 boy 并在应用程序的 A 部分中引用它,然后在 B 部分继续修改 boy,A 部分将不会更新为boy 的新值。

let framework = 'Vue';
let sentence = `${framework} is awesome`;
console.log(sentence)
 // 输出 "Vue is awesome"
framework = 'React';
console.log(sentence)
// 如果 sentence 是响应式的,输出 react is awesome.

上面的代码片段是 JavaScript 非响应式特性的经典示例——因此,为什么更改没有反映在 sentence 变量中呢?

在 Vue 2.x 中,props、computed 和 data() 默认情况下都是响应式的,但创建此类组件时数据中不存在的属性除外。 这意味着当一个组件被注入到 DOM 中时,只有组件数据对象中的现有属性会在这些属性发生变化时导致组件更新。

在内部,Vue 3 使用 Proxy 对象(ECMAScript 6 功能)来确保这些属性是响应式的,但它仍然提供使用 Vue 2 中的 Object.defineProperty 的选项来支持 Internet Explorer(ECMAScript 5)。 此方法直接在对象上定义新属性,或修改对象上的现有属性,并返回该对象。

乍一看,由于我们大多数人已经知道响应式设计在 Vue 中并不新鲜,因此似乎没有必要使用这些属性,但是当你处理具有多个可重用函数的大型应用程序时,Options API 有其局限性 。 为此,引入了新的 Composition API 以帮助抽象逻辑,以使代码库更易于阅读和维护。 此外,我们现在可以使用任何新属性和方法轻松地使任何变量成为响应式,而不管其数据类型如何。

当我们使用 setup 选项作为 Composition API 的入口点时,数据对象、计算属性和方法是不可访问的,因为在执行 setup 时组件实例尚未创建。 这使得无法在 setup 中使用内置的响应式功能。 因此,在本文中,我们将了解我们如何让响应式在这些对象中成为可能。

reactive

根据官方文档,在 Vue 2.6 中等效于 Vue.observable() 的 reactive 方法在我们尝试创建一个所有属性都是响应式的对象(例如 Options 中的数据对象)。 在底层,Options API 中的数据对象使用此方法来使其中的所有属性都具备响应式特性。

我们可以像这样创建自己的响应式对象:

import { reactive } from 'vue'

// reactive state
let user = reactive({
        "id": 1,
        "name": "Leanne Graham",
        "username": "Bret",
        "email": "Sincere@april.biz",
        "address": {
            "street": "Kulas Light",
            "suite": "Apt. 556",
            "city": "Gwenborough",
            "zipcode": "92998-3874",
            "geo": {
                "lat": "-37.3159",
                "lng": "81.1496"
            }
        },
        "phone": "1-770-736-8031 x56442",
        "website": "hildegard.org",
        "company": {
            "name": "Romaguera-Crona",
            "catchPhrase": "Multi-layered client-server neural-net",
            "bs": "harness real-time e-markets"
        },
        "cars": {
            "number": 0
        }
    })

在这里,我们从 Vue 导入了 reactive 方法,然后我们通过将其值作为参数传递给该函数来声明我们的用户变量。 在这样做的过程中,我们 user 对象成为响应式。之后,如果我们在模板中使用 user 并且如果该对象的对象或属性发生变化,那么该值将在该模板中自动更新。

ref

正如我们有一种使对象具有响应式的方法一样,我们也需要一种方法来使其他独立的 primitive 值(strings, booleans, undefined values, numbers等)和数组具有响应式特性。 在开发过程中,我们将使用这些数据类型,同时还需要它们具有响应式应。 我们可能会想到的第一种方法是使用响应式并传入我们想要使其成为响应式的变量的值。

import { reactive } from 'vue'

const state = reactive({
  users: [],
});

因为 reactive 有很深的响应式转换,所以 user 作为属性也会是响应式的,从而达到我们的目的。 因此,user 总是会在此类应用程序的模板中使用它的任何地方进行更新。 但是使用 ref 属性,我们可以通过将该变量的值传递给 ref 来使其具有响应式。 此方法也适用于对象,但它比使用 reactive 方法时 将对象嵌套更深一层。

let property = {
  rooms: '4 rooms',
  garage: true,
  swimmingPool: false
}
let reactiveProperty = ref(property)
console.log(reactiveProperty)
// 输出 {
// value: {rooms: "4 rooms", garage: true, swimmingPool: false}
// }

上述代码中,ref 将这个 property 传递给 reactiveProperty,并将其转换为一个带有值键的对象。 这意味着,我们可以通过调用 variable.value 来访问我们的变量,也可以通过同样的方式调用它来修改它的值。

import {ref} from 'vue'
let age = ref(1)

console.log(age.value)
//prints 1
age.value++
console.log(age.value)
//prints 2

有了这个,我们可以将 ref 导入我们的组件并创建一个响应式变量:

<template>
  <div class="home">
    <form @click.prevent="">
      <table>
        <tr>
          <th>Name</th>
          <th>Username</th>
          <th>email</th>
          <th>Edit Cars</th>
          <th>Cars</th>
        </tr>
        <tr v-for="user in users" :key="user.id">
          <td>{{ user.name }}</td>
          <td>{{ user.username }}</td>
          <td>{{ user.email }}</td>
          <td>
            <input
              type="number"
              style="width: 20px;"
              name="cars"
              id="cars"
              v-model.number="user.cars.number"
            />
          </td>
          <td>
            <cars-number :cars="user.cars" />
          </td>
        </tr>
      </table>
      <p>Total number of cars: {{ getTotalCars }}</p>
    </form>
  </div>
</template>
<script>
  // @ is an alias to /src
  import carsNumber from "@/components/cars-number.vue";
  import axios from "axios";
  import { ref } from "vue";
  export default {
    name: "Home",
    data() {
      return {};
    },
    setup() {
      let users = ref([]);
      const getUsers = async () => {
        let { data } = await axios({
          url: "data.json",
        });
        users.value = data;
      };
      return {
        users,
        getUsers,
      };
    },
    components: {
      carsNumber,
    },
    created() {
      this.getUsers();
    },
    computed: {
      getTotalCars() {
        let users = this.users;
        let totalCars = users.reduce(function(sum, elem) {
          return sum + elem.cars.number;
        }, 0);
        return totalCars;
    },
  };
</script>

上述代码中,我们导入了 ref 以便在我们的组件中创建一个响应式的 user 变量。 然后我们导入 axios 以从 public 文件夹中的 JSON 文件中获取数据,并且我们导入了我们将在稍后创建的 carsNumber 组件。 我们接下来要做的是使用 ref 方法创建一个响应式用户变量,以便用户可以在我们的 JSON 文件的响应发生变化时进行更新。

我们还创建了一个 getUser 函数,它使用 axios 从我们的 JSON 文件中获取 users 数组,并将此请求中的值分配给 users 变量。 最后,我们创建了一个计算属性,用于计算用户拥有的 cars 总数,因为我们在模板部分对其进行了修改。

需要注意的是,当访问在模板部分或 setup() 之外返回的 ref 属性时,它们会 自动浅展开 。 这意味着作为对象的 refs 仍然需要一个 .value 才能被访问。 因为 users 是一个数组,我们可以在 getTotalCars 中简单地使用 users 而不是 users.value。

在模板部分,我们展示了一个显示每个用户信息的表格,以及一个 <cars-number /> 组件。 这个组件接受一个 cars prop,该prop 显示在每个 user 的行中,作为他们拥有的汽车数量。 每当用户对象中 cars 的值发生变化时,此值就会更新,这正是我们使用 Options API 时数据对象或计算属性的工作方式。

toRefs

当我们使用 Composition API 时,setup 函数接受两个参数:props 和 context。 这个 props 从组件传递到 setup(),它使得从这个新 API 中访问组件具有的 props 成为可能。 这种方法特别有用,因为它允许在不失去响应式的情况下解构对象。

<template>
  <p>{{ cars.number }}</p>
</template>
<script>
  export default {
    props: {
      cars: {
        type: Object,
        required: true,
      },
      gender: {
        type: String,
        required: true,
      },
    },
    setup(props) {
      console.log(props);
   // 输出 {gender: "female", cars: Proxy}
    },
  };
</script>
<style></style>

为了在 Composition API 中使用来自 props 的对象的值,同时确保它保持其响应式,我们使用了 toRefs。 此方法 接受一个响应式对象并将其转换为一个普通对象,其中 原始响应式对象的每个属性都成为一个 ref。

这意味着下面这个数据:

cars: {
  number: 0
}

会变成这样:

{
  value: cars: {
    number: 0
}

有了这个,我们可以在 setup 中的任何部分中使用 cars,同时仍然保持其响应式特性。

 setup(props) {
   let { cars } = toRefs(props);
   console.log(cars.value);
   // prints {number: 0}
},

我们可以使用 Composition API 的 watch 来观察这个新变量,并对这个变化做出我们可能想要的反应。

setup(props) {
      let { cars } = toRefs(props);
      watch(
        () => cars,
        (cars, prevCars) => {
          console.log("deep ", cars.value, prevCars.value);
        },
        { deep: true }
      );
  }

toRef

我们可能面临的另一个常见场景是传递一个值,该值不一定是对象,而是与 ref 一起使用的数据类型之一(array, number, string, boolean等)。 使用 toRef,我们可以从源响应式对象创建响应式属性(即 ref)。 这样做将确保该属性保持响应式,并在源响应式数据更改时也进行更新。

const cars = reactive({
  Toyota: 1,
  Honda: 0
})

const NumberOfHondas = toRef(cars, 'Honda')

NumberOfHondas.value++
console.log(cars.Honda) // 1

cars.Honda++
console.log(NumberOfHondas.value) // 2

上述代码中,我们使用 reactive 方法创建了一个响应式对象 cars,其具有 Toyota 和 Honda 属性。 我们还利用 toRef 从 Honda 创建了一个响应式变量。 从上面的示例中,我们可以看到,当我们使用响应式 cars 对象或 NumberOfHondas 更新 Honda 时,两个实例中的值都会更新。

该方法与我们上面介绍的 toRefs 方法相似但又如此不同,因为它保持与源数据的连接,可用于字符串、数组和数字。

与 toRefs 不同的是,我们不需要担心在创建时它的源数据中是否存在该属性,因为如果在创建此 ref 时该属性不存在,而是返回 null,它仍然会被存储 作为一个有效的属性,有一个观察者的形式,所以当这个值改变时,这个使用 toRef 创建的 ref 也会被更新。

我们也可以使用这个方法从 props 创建一个响应式属性。 看起来像这样:

<template>
  <p>{{ cars.number }}</p>
</template>
<script>
  import { watch, toRefs, toRef } from "vue";
  export default {
    props: {
      cars: {
        type: Object,
        required: true,
      },
      gender: {
        type: String,
        required: true,
      },
    },
    setup(props) {
      let { cars } = toRefs(props);
      let gender = toRef(props, "gender");
      console.log(gender.value);
      watch(
        () => cars,
        (cars, prevCars) => {
          console.log("deep ", cars.value, prevCars.value);
        },
        { deep: true }
      );
    },
  };
</script>

在这里,我们创建了一个基于从 props 获得的 gender 属性的 ref。 当我们想要对特定组件的 prop 执行额外操作时,这会派上用场。

写在最后

在本文中,我们使用 Vue 3 中新引入的一些方法和函数来了解 Vue 中的响应式设计师如何工作的。我们首先了解什么是响应式以及 Vue3 如何在底层使用 Proxy 对象来实现这一点。 我们还研究了如何使用 reactive 创建响应式对象以及如何使用 ref 创建响应式属性。

最后,我们研究了如何将响应式对象转换为普通对象,每个对象的属性都是指向原始对象相应属性的 ref,并且我们看到了如何为响应式源对象上的属性创建 ref。

如果你觉得这篇文章还不错,请点击下方小红心 👍🏻 ❤️,鼓励一下!我会继续为你带来优质的内容~我是前端修罗场,一个独立运行的专业技术社区,感谢你关注我!

vue3项目实例 --- 个人博客demo Vue框架 内容管理博客demo展示博客总览页面添加博客页面博客预览博客编辑删除demo中遇到的问题Component "default" in record with path "/blog/:id" is not a valid component下拉列表没有显示所有的数据自定义指令v-color测试不成功demo部分源码 Vue小案例 ---- 简单的个人博客【好看的样式可以再完善,主要是思路】 前面分享了vue3的大部分的知识,所以专门出一篇小小的文章实操一下;后面博主会基于vue + spr 阅读详情

相关推荐

Vue3系列二:如何实现对响应式数据的代理

本次我们大体介绍了 Vue3 中对响应式数据的代理,其中分为引用类型数据和基本类型数据。我们发现其中的核心设计思路其实并不是很难,但是如果从整个系统来看,要完美无缺的实现对数据的代理,就需要完善的考虑很多因素。Vue3 中对响应式数据的代理与触发就实现的很完善,这也是 Vue3 框架设计的一个重点与难点,也是其魅力所在。

老司机的后备箱 1454

Vue3之响应式

如果有多个文件都直接修改数据的话,我们对于数据的更改是不确定的,所以尽可能的对于响应式的状态的变更都保持在供给方组件中,这样确保状态的声明和变更操作都内聚在同一个组件中。是一个钩子函数,是在组件中使用组合API的入口,当我们在选项式API的组件中使用组合API时需要这个函数,组合API都要写在这个函数内。生成的是一个代理对象,可以理解为有一个对象包裹住这个原对象,这个对象就叫原对象的包装对象,响应性是通过这个包装对象实现的。创建的响应式对象都是深层的,深层对象或数组也是响应式的,他们的改变都能被监测到。

Zhang_YingJie的博客 7159

深入理解 Vue 的响应式原理:从 Vue 2 到 Vue 3

Vue.js 的响应式系统是其核心特性之一,它使得数据和视图能够自动保持同步。无论是 Vue 2 还是 Vue 3,响应式原理都是通过监听数据变化并自动更新视图来实现的。然而,Vue 2 和 Vue 3 在实现响应式的方式上有所不同。本文将深入探讨 Vue 的响应式原理,并通过模拟实现帮助你更好地理解其工作机制。

vvilkin的学习备忘 2167

vue3 表格、echarts图表响应式布局方法

前端路上 | 所知甚少,唯善学。各位小伙伴有什么疑问,欢迎留言探讨。— 关注我:前端路上不迷路 —

学全栈、大前端方向,就找前端早间课 918

Vue3 - 从 vue2 到 vue3 过渡,这一套就够了(案例 + 效果演示)(一)

vue3 中有一个新的配置项,值是一个函数. 他是所有组合 API 的“舞台”,也就是说,之前 vue2 组件中使用到的 data、methods...... 都要配置在 setup 中.

CYK_byte的博客 3763

[探索Vue 源码系列专题] 初识 Vue 源码:结构与阅读指南

Vue 是一款广受欢迎的前端框架,其优雅的设计让开发者用得舒心,但背后的实现原理往往被忽略。学习 Vue 源码不仅能提升我们的技术深度,也能帮助我们更好地理解框架设计的思路,甚至在实际项目中应用类似的架构模式。接下来,我们将深入剖析 Vue 的响应式系统,揭示数据驱动背后的奥秘。源码中有很多“珠玉在前”的实现技巧,比如 Vue3 的 Proxy 响应式、Diff 算法等,学会了可以融入自己的项目中。例如,想知道 Vue 的响应式系统是如何工作的,可以从。Vue 的核心功能模块都在这里,比如。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 123

深入源码设计!Vue3.js核心API——Computed实现原理

我们都知道computed是Vue3的响应式系统核心API,那么它是如何设计和实现的呢?相信阅读完这篇文章,你就能够手写computed了!

海风依旧 1022

Vue3通透教程【五】Vue3中的响应式数据 reactive函数、ref函数

Vue3中的响应式数据

商务合作欢迎私信我 4万+

vue3.0 Composition API(转载整理)

vue3.0 Composition API一、setup()1.接收props数据2.context二、reactive是用来创建一个响应式对象,等价于2.x的Vue.observable三、ref四、shallowReactive五、shallowRef六、triggerRef七、toRaw八、markRaw九、customRef10、isRef十一、toRefs十二、toRef十三、computed十四、watch1、监听指定的数据源2、监听ref类型的数据变化3、监听多个指定数据变化4、清除监视5、

weixin_45780818的博客 1677

BitLocker加密盘解密实战:从隐藏分区到密钥恢复的全过程

本文深入探讨了BitLocker加密盘在密钥丢失或遗忘情况下的解密实战方法。文章系统性地介绍了从理解加密机制、制作取证镜像,到深度扫描隐藏分区、分析内存转储寻找密钥残留,最终利用恢复密钥解锁加密卷的全过程。重点剖析了非标准恢复路径,为数据恢复和数字取证工作提供了专业的技术框架和实战思路。

weixin_29268385的博客 331

Doris Streamloader安装教程

Doris Streamloader 是一款用于将数据导入 Doris 数据库的专用客户端工具。本文介绍其在centos7环境下的安装过程

qq_44540985的博客 1089

深入理解Vue响应式原理

本文,由浅入深,详细讲述了Vue响应式原理

qq_44588612的博客 8112

3.ESP32S3 AP 配网开发实战:HTTP 与 WebSocket 协议实现

本文介绍了基于ESP32S3的AP配网实现方案,通过HTTP协议提供配网网页,利用WebSocket实现双向通信。详细解析了HTTP和WebSocket协议特点,阐述了SPIFFS文件系统存储HTML网页的方法,包括分区表配置、CMakeLists设置和代码实现。工程采用模块化设计,包含WiFi管理、Web服务器、IO扩展等组件,支持手机浏览器直接配网。测试验证了从AP热点连接到路由器切换的全流程,并总结了SPIFFS操作、WebSocket通信等核心优化点。该方案无需专用APP,适合物联网设备快速部署场景

u011697185的专栏 957

理解Vue 3响应式系统原理

Vue 3的诞生背景:Vue 2的局限与改进需求Vue 3的主要版本发布日期和目标:稳定性和性能的提升响应式系统:是一种数据绑定机制,在数据模型变化时,自动更新视图。在Vue中,响应式系统基于数据劫持和发布-订阅模式实现。

https://blog.cmdragon.cn/ 1714

DTW Barycenter Averaging(DBA)——平均序列求法

DBA该算法是用来求序列数据集SS的一致序列(平均序列)。由Franc-ois Petitjean提出的。目前,该方法求得的平均序列是最准确的。 假设一元组为S={s1,s2,⋯,sn}S={s1,s2,\cdots,sn},当SS中的元素为实数时,很容易求的SS的平均值: avg=s1+s2+⋯+snn(1) avg = \dfrac{s1 +s2+\cdots+sn}{n} \qquad\q

光怪陆离 1万+

dify源码本地部署,dify k8s部署

Dify.AI 是一款简单易用且开源的 LLMOps 平台,帮助开发者更简单、更快速地创建 AI 应用。它的核心理念是通过可声明式的 YAML 文件定义 AI 应用的各个方面,包括 Prompt、上下文和插件等。Dify 提供了可视化的 Prompt 编排、运营、数据集管理等功能。这些功能使得开发者能够在数天内完成 AI 应用的开发,或将 LLM 快速集成到现有应用中,并进行持续运营和改进。

shykevin的博客 1014

【Vue3中的响应式原理】

在Vue2中,数据响应式主要借助Object.defineProperty()来实现,存在的缺陷是无法操作数据的增加和删除,在Vue3中,数据响应式主要借助proxy和Reffect配合实现,可以做到实现数据的增删改查。

小田是个程序员的博客欢迎你的到来呀~ 1万+

不用U盘也能装Ubuntu?手把手教你用EasyUEFI搞定双系统(附企业版资源)

本文详细介绍了无需U盘即可安装Ubuntu双系统的方法。通过使用EasyUEFI工具,在Windows环境下创建虚拟启动分区并配置UEFI引导,即可直接从硬盘启动Ubuntu安装程序。该方法特别适合开发者或技术爱好者快速搭建Linux开发环境,操作安全便捷,无需额外物理介质。

weixin_29215391的博客 285

深入讲解一下 Vue 3 的核心源码库 vuejs/core

track 负责“依赖收集”,trigger 负责“派发更新”。

u011091936的博客 1383

【100%通过率】华为OD机试真题 Python 实现【网上商城优惠活动 / 模拟商场优惠打折II】

某网上商场举办优惠活动,发布了满减、打折、无门槛3种 优惠券,分别为: 1:每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200~299可使用2张减20元,以此类推; 2:92折券,1次限使用1张,如100元,则优惠后为92元, 3:无门槛5元优惠券,无使用数限制,直接减5元。

MISAYAONE的博客 9369

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

weixin_42412049的博客 2275

深入理解 Vue 中的响应式系统

Vue.js 是一个用于构建用户界面的渐进式框架。它的核心特性之一就是响应式系统,这使得数据和视图能够自动保持同步。理解 Vue 的响应式系统不仅能帮助我们更好地使用 Vue,还能为优化和调试 Vue 应用提供有力支持。本文将深入探讨 Vue 的响应式系统,包括其工作原理、实现机制以及使用中的一些难点和注意事项。

沉浮yu大海的博客 1687

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Vuejs设计与实现 —— 实现响应式系统

Vuejs设计与实现 —— 实现响应式系统

weixin_43822185的博客 1080

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Vue3 响应式原理详解

Vue 3 的响应式系统基于 Proxy对象,它允许 Vue 拦截对象的读写操作,并在这些操作发生时执行特定的逻辑。与 Vue 2 中基于的响应式实现相比,Proxy提供了更强大的功能,能够监听更多类型的操作(如属性的添加和删除),并且能够在性能上获得提升。reactive:创建一个深层响应式对象,可以跟踪所有嵌套属性的变化。ref:用于将基本类型的数据变成响应式,或者用来封装引用类型的对象。computed:用于定义计算属性,可以根据其他响应式数据动态计算值。effect。

xiaowu5705的博客 2850

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VUE3响应式原理,及与VUE2响应式的区别

响应式原理和vue响应原理的相关概念,在vue3的响应式实现是基于ES6中的proxy和Reflect实现的,与vue2借助有所不同。要想理解vue3的响应式实现,必须要先了解proxy和Reflect的作用。

qq_56427830的博客 3212
上一篇: 【机器学习】在浏览器端实践机器学习,需要考虑哪些注意事项
下一篇: 前端技能树,面试复习第 18 天—— 怎么对项目做性能优化(2): Webpack 优化策略
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论 32
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值