玩转Vue3之shallowRef和shallowReactive
前言
Vue3 作为一款现代的 JavaScript 框架,引入了许多新的特性和改进,其中包括 shallowRef 和 shallowReactive。这两个功能在Vue 3中提供了更加灵活和高效的状态管理选项,尤其适用于大型和复杂的应用程序。
Vue 3 的响应式系统
Vue3 引入了新的响应式系统,与 Vue2相比,它具有更好的性能和更多的功能。这个新系统基于 Proxy,为开发者提供了更直观、灵活的API,其中包括ref、reactive、shallowRef和shallowReactive等。之前的文章写过有关响应式系统的解释,在本博客中,我们将深入探讨这两个API,并提供一些具体的例子,以便更好地理解它们的用法和优势。
1.shallowRef:浅层响应式引用
shallowRef 是一个创建响应式对象的函数,与 ref 不同之处在于,shallowRef 只会在对象的第一层进行响应式处理。这意味着当对象的深层属性发生变化时,不会触发视图更新,从而提高了性能。
让我们看一个例子:
import { shallowRef, watchEffect } from 'vue';
const user = shallowRef({
name: 'John',
address: {
city: 'New York',
zip: '10001'
}
});
watchEffect(() => {
console.log('User changed:', user.value);
});
// 修改深层属性,不会触发视图更新
user.value.address.city = 'San Francisco';
在上面的例子中,watchEffect 只会在 name 属性发生变化时触发,而不会在 address 的变化时触发。这有助于避免不必要的性能开销,这对于一些场景非常有用,例如在处理大型数据集合时,可以提高性能并减少不必要的更新。
2.shallowReactive:浅层响应式对象
与 shallowRef 类似,shallowReactive 用于创建一个浅层响应式的对象。这意味着只有对象的第一层属性会被响应化,这对于避免在深层次对象中进行递归响应式转换非常有用。
import { shallowReactive, watchEffect } from 'vue';
const user = shallowReactive({
name: 'John',
address: {
city: 'New York',
zip: '10001'
}
});
watchEffect(() => {
console.log('User changed:', user);
});
// 修改深层属性,不会触发视图更新
user.address.city = 'San Francisco';
在上述例子中,watchEffect 只在 name 属性变化时触发,而 address 属性的变化不会引起更新。
使用场景
1. 性能优化
在处理大型数据集或嵌套对象时,使用 shallowRef 和 shallowReactive 可以提高性能,避免不必要的响应式转换和更新。
2. 避免无限循环
当你在数据模型中存在相互引用的情况时,使用 shallowRef 和 shallowReactive 可以帮助你避免创建无限循环的响应式数据。
3. 更精确的控制
如果你只关心对象的第一层属性,而不希望触发深层次的更新,那么 shallowRef 和 shallowReactive 提供了更精确的控制。
结论
使用 shallowRef 和 shallowReactive 的性能优势在于避免了深层对象的递归侦听,从而减少了触发响应式系统的次数。这对于大型项目和数据结构来说是非常有用的。
通过了解它们的使用方式和性能优势,我们可以更好地利用 Vue3 的响应式系统。始终记住,在使用这些特性时,要根据具体情况权衡性能和开发的便利性,确保你的代码保持清晰、易读和可维护。
玩转Vue3之shallowRef和shallowReactive的更多相关文章
- 教程 - 在 Vue3+Ts 中引入 CesiumJS 的最佳实践@2023
目录 1. 本篇适用范围与目的 1.1. 适用范围 1.2. 目的 2. 牛刀小试 - 先看到地球 2.1. 创建 Vue3 - TypeScript 工程并安装 cesium 2.2. 清理不必要的 ...
- 简单梳理下 Vue3 的新特性
在 Vue3 测试版刚刚发布的时候,我就学习了下 Composition API,但没想到正式版时隔一年多才出来,看了一下发现还是增加了不少新特性的,在这里我就将它们一一梳理一遍. 本文章只详细阐述 ...
- Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化
1 # 一.Vue3不常用的Composition API 2 # 1.shallowReactive与shallowRef 3 .shallowReactive: 只处理对象最外层属性的响应式(浅响 ...
- vue3.0学习笔记
vue3转vue2: https://vue-next-template-explorer.netlify.app/ 1. Vue3.0六大两点 Performance:性能比Vue2.x快1.2~2 ...
- 从0开始手把手带你入门Vue3-全网最全(1.1w字)
天命不足畏,祖宗不足法. --王安石 前言 本文并非标题党,而是实实在在的硬核文章,如果有想要学习Vue3的网友,可以大致的浏览一下本文,总体来说本篇博客涵盖了Vue3中绝大部分内容,包含常用的Com ...
- vue3 | shallowReactive 、shallowRef、triggerRef
shallowReactive 使用 reactive 声明的变量为递归监听,使用 shallowReactive 声明的变量为非递归监听(通俗的讲就是 reactive 创建的对象将会被 vue 内 ...
- Vue3 源码之 reactivity
注: 为了直观的看到 Vue3 的实现逻辑, 本文移除了边缘情况处理.兼容处理.DEV环境的特殊逻辑等, 只保留了核心逻辑 vue-next/reactivity 实现了 Vue3 的响应性, rea ...
- 全面了解Vue3的 ref 和相关函数和计算属性
基础类型的响应性 -- ref 在vue3里面,我们可以通过 reactive 来实现引用类型的响应性,那么基础类型的响应性如何来实现呢? 可能你会想到这样来实现: const count = rea ...
- Vue3的新特性及相关的Composition API使用
首先 创建项目 Vue3 Vue3 相较于Vue2 的6大亮点: 1 性能快. 2 按需编译 体积更小 3 提供了组合API 类似于react 的React Hooks 4 更好的Ts支持 5 暴露了 ...
- 助你上手Vue3全家桶之Vue3教程
目录 前言 1,setup 1.1,返回值 1.2,注意点 1.3,语法 1.4,setup的参数 2,ref 创建响应式数据 3,reactive 创建响应式数据 4,computed 计算属性 5 ...
随机推荐
- 予力八六三软件应用现代化,提升DevSecOps效能,探索交付之路
本文分享自华为云社区<予力八六三软件应用现代化,提升DevSecOps效能,探索全球交付之路>,作者: HuaweiCloudDeveloper. 来源:<华为云DTSE>期刊 ...
- Vue3学习笔记 —— 状态管理、Vuex、Pinia (未完结)
优秀文章分享:vue中使用vuex(超详细) - 掘金 (juejin.cn) 一.状态管理 1.1.什么是状态管理? 理论上来说,每一个 Vue 组件实例都已经在"管理"它自己的 ...
- 5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
中台Admin(Admin.Core) 中台Admin(Admin.Core)是前后端分离权限管理系统,前端 UI 基于Vue3开发,后端 Api 基于.NET 8.0开发.支持多租户.接口权限.数据 ...
- Promise, async, await实现异步编程,代码详解
写在开头 一点题外话 其实最近在不断的更新Java的知识,从基础到进阶,以及计算机基础.网络.WEB.数据库.数据结构.Linux.分布式等等内容,预期写成一个既可以学习提升又可以面试找工作的< ...
- 【DC渗透系列DC-4】
主机发现 arp-scan -l ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:6b: ...
- 执行orachk检查数据库环境
Exadata环境巡检需要执行专有的exachk,而普通Oracle环境可以通过执行orachk来检查集群和数据库相关健康状况. 1.使用orachk检查健康状态 使用root用户执行,期间可能需要多 ...
- .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ 业务场景详解)--学习笔记
2.6.5 RabbitMQ -- 业务场景详解 异步处理 应用解耦 流量削锋 日志处理 异步处理 串行方式 并行方式 异步方式 串行方式 _userRepo.Add(user); _emailSer ...
- NC13885 Music Problem
题目链接 题目 题目描述 Listening to the music is relax, but for obsessive(强迫症), it may be unbearable. HH is an ...
- 【Unity3D】IK动画
1 IK简介 2D动画.人体模型及动画.人物跟随鼠标位置中介绍了 Aniamtion.Animator.人体模型.人体骨骼.人体动画等基础知识及人体动画的应用,本文将进一步介绍 IK 动画. ...
- 【Android】使用 MediaMetadataRetriever 获取视频信息
1 环境配置与初始化 (1)申请权限 在 AndroidManifest.xml 中的 manifest 标签(application 同级标签)下添加外部存储读写权限,如下: <use ...