当前位置: 首页 > news >正文

Vue 3 入门教程 3- 响应式系统

一、响应式系统核心原理​

Vue 3 的响应式系统是其核心特性之一,它能够自动追踪数据的变化,并在数据改变时更新相关的视图。其核心原理基于 ES6 的 Proxy 对象。​

Proxy 可以创建一个对象的代理,从而实现对目标对象的属性读取、赋值、删除等操作的拦截和自定义处理。当我们通过代理对象访问或修改属性时,Vue 能够感知到这些操作,进而触发相应的依赖更新,实现视图与数据的自动同步。​

与 Vue 2 基于 Object.defineProperty 的响应式实现相比,Proxy 具有以下优势:​

  • 能直接监听对象而非属性,可对对象的所有属性进行拦截。​
  • 能监听数组的变化,包括数组的 push、pop、splice 等方法操作。​
  • 能监听属性的添加和删除。​

二、创建响应式数据​

在 Vue 3 中,主要通过 ref 和 reactive 来创建响应式数据,它们适用于不同的数据类型场景。​

2.1 ref​

ref 主要用于创建基本类型(String、Number、Boolean 等)的响应式数据,也可以用于创建对象类型的响应式数据。当用于对象类型时,它内部会自动将其转换为 reactive 代理对象。​

使用案例

<template><div><p>当前计数:{{ count }}</p><button @click="increaseCount">增加计数</button><p>用户名:{{ user.name }}</p><button @click="changeName">修改用户名</button></div>
</template><script setup>
import { ref } from 'vue'// 创建基本类型响应式数据
const count = ref(0)// 创建对象类型响应式数据
const user = ref({name: '张三',age: 20
})// 修改基本类型响应式数据
const increaseCount = () => {// 访问 ref 创建的响应式数据需要通过 .value 属性count.value++
}// 修改对象类型响应式数据
const changeName = () => {// 对于对象类型,修改其属性时,即使是通过 ref 创建的,也可以直接修改属性值(内部已转为 reactive)user.value.name = '李四'
}
</script>

在上述案例中,我们使用 ref 创建了基本类型的 count 和对象类型的 user。当点击按钮修改数据时,视图会自动更新。需要注意的是,在脚本中访问和修改 ref 创建的响应式数据时,要通过 .value 属性,而在模板中可以直接使用变量名,无需 .value。

2.2 reactive​

reactive 用于创建对象或数组类型的响应式数据,它返回一个响应式的代理对象。​

使用案例

<template><div><p>学生信息:</p><p>姓名:{{ student.name }}</p><p>年龄:{{ student.age }}</p><p>课程:{{ student.courses.join(', ') }}</p><button @click="updateStudent">更新学生信息</button></div>
</template><script setup>
import { reactive } from 'vue'// 创建对象类型响应式数据
const student = reactive({name: '王五',age: 18,courses: ['数学', '语文']
})// 修改响应式数据
const updateStudent = () => {student.age = 19student.courses.push('英语')
}
</script>

在这个案例中,使用 reactive 创建了 student 对象,包含姓名、年龄和课程数组。当调用 updateStudent 方法修改年龄和课程时,视图会实时更新。与 ref 不同,reactive 创建的响应式对象在访问和修改属性时,无需使用 .value。​

2.3 ref 与 reactive 的区别​

  • 数据类型:ref 适用于基本类型和对象类型数据;reactive 仅适用于对象和数组类型数据。​
  • 访问方式:ref 创建的响应式数据在脚本中需通过 .value 访问和修改,模板中可直接使用;reactive 创建的响应式对象可直接访问和修改属性。​
  • 返回值:ref 返回一个包含 value 属性的响应式对象;reactive 返回一个响应式的代理对象。​

在实际开发中,可根据数据类型和使用场景选择合适的方法。对于基本类型数据,优先使用 ref;对于对象或数组类型数据,reactive 更为便捷,但如果需要将对象类型数据作为响应式变量单独传递,ref 可能更合适。

结语:

接下来会讲解 Vue 3 中计算属性和侦听器的知识。计算属性用于处理衍生数据,侦听器则用于监测数据变化并执行相应操作,我会结合案例说明它们的用法和适用场景。

http://www.dtcms.com/a/306812.html

相关文章:

  • Qt知识点3『自定义属性的样式表失败问题』
  • 飞算JavaAI自动设计表结构:重塑数据库开发新范式
  • 土木工程相关优化的C++实践
  • 《Spring Security源码深度剖析:Filter链与权限控制模型》
  • GitHub 上 Star 数量前 8 的开源 MCP 项目
  • <RT1176系列13>LWIP概念介绍
  • CSS 常用属性汇总
  • Thales靶场通关攻略
  • 【25-cv-08323】Keith携Olha Moroz13张版权画发案!
  • JAVAEE--4.多线程案例
  • Kettle 开源ETL数据迁移工具从入门到实战
  • 【swoole Windows 开发(swoole-cli 开发 hyperf)】
  • SpringBoot升级2.5.3 2.6.8
  • 原生C++实现信号与槽机制:原理详解
  • 【案例教程】基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用
  • 自定义Linux登录前的欢迎信息
  • 无人机入门--个人笔记
  • Set集合
  • Windows管理用户脚本
  • 多元线性回归方程的原理解析与案例
  • 【硬件】Verilog相关
  • 高程DEM文件下载
  • 开发避坑短篇(9):解决升级Vue3后slot attributes废弃警告
  • 电子电气架构 --- 区域架构让未来汽车成为现实
  • 电力设施通道防外破防异物实时监控预警装置的核心功能是什么
  • VoIP技术全面深度学习指南:从原理到实践的认知进化
  • 0730 数据结构重点整理
  • laravel计划任务和异步队列任务,拆分成不同队列,减少计划任务系统压力
  • Redis知识点(1)
  • vulhub-ica1靶场攻略