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

Vue 3 响应式高阶用法之 `shallowRef()` 详解

Vue 3 响应式高阶用法之 shallowRef() 详解

文章目录

  • Vue 3 响应式高阶用法之 `shallowRef()` 详解
  • 简介
  • 一、使用场景
    • 1.1 深层嵌套对象的性能优化
    • 1.2 需要部分响应式的场景
  • 二、基本使用
    • 2.1 引入 `shallowRef`
    • 2.2 定义 `shallowRef`
  • 三、功能详解
    • 3.1 浅层响应式
    • 3.2 与 `ref` 的对比
  • 四、最佳实践及案例
    • 4.1 使用 `shallowRef` 优化性能
    • 4.2 结合 `watch` 和 `computed`
  • 五、总结

简介

在 Vue 3 中,响应式系统是其核心特性之一。通过响应式系统,开发者可以轻松地管理和更新应用状态。然而,对于一些特殊场景,我们可能需要更细粒度的控制。这时,shallowRef() 就派上用场了。本文将详细介绍 shallowRef() 的使用场景、基本使用、功能详解、最佳实践及案例,帮助读者更好地理解和应用这一高阶用法。

一、使用场景

1.1 深层嵌套对象的性能优化

在处理深层嵌套对象时,Vue 的默认响应式系统会递归地将对象的每一层都转换为响应式。这在某些情况下可能会导致性能问题。shallowRef() 只会使对象的第一层属性成为响应式,从而可以优化性能。

1.2 需要部分响应式的场景

有些场景下,我们只需要对象的某些属性是响应式的,而其他属性则不需要。shallowRef() 可以满足这种需求,使得开发者可以更灵活地控制响应式行为。

二、基本使用

2.1 引入 shallowRef

在 Vue 3 中,shallowRef 可以通过 @vue/reactivity 包引入:

import { shallowRef } from 'vue';

2.2 定义 shallowRef

使用 shallowRef 定义一个响应式引用对象:

const state = shallowRef({user: {name: 'Alice',age: 25},isLoggedIn: false
});

在这个例子中,state 对象的第一层属性是响应式的,但 user 对象的属性不会被深度转换为响应式。

三、功能详解

3.1 浅层响应式

shallowRef 只会使对象的第一层属性成为响应式:

state.value.isLoggedIn = true; // 响应式更新
state.value.user.name = 'Bob'; // 非响应式更新

在上述代码中,isLoggedIn 属性的变化会触发响应式更新,而 user 对象的属性变化不会触发。

3.2 与 ref 的对比

ref 相比,shallowRef 不会递归地将对象的每一层都转换为响应式:

import { ref } from 'vue';const deepState = ref({user: {name: 'Alice',age: 25},isLoggedIn: false
});deepState.value.user.name = 'Bob'; // 响应式更新

在这个例子中,ref 会使 user 对象的属性也成为响应式。

四、最佳实践及案例

4.1 使用 shallowRef 优化性能

在处理大量数据或深层嵌套对象时,使用 shallowRef 可以显著提高性能:

const largeData = shallowRef({items: Array.from({ length: 10000 }, (_, i) => ({ id: i, value: `Item ${i}` }))
});

4.2 结合 watchcomputed

shallowRef 可以与 watchcomputed 结合使用,提供更灵活的响应式控制:

import { watch, computed } from 'vue';const userState = shallowRef({user: {name: 'Alice',age: 25}
});watch(() => userState.value.user.name, (newName, oldName) => {console.log(`User name changed from ${oldName} to ${newName}`);
});const userName = computed(() => userState.value.user.name);

五、总结

shallowRef 是 Vue 3 中一个强大的工具,适用于需要部分响应式或优化性能的场景。通过本文的介绍,我们了解了 shallowRef 的使用场景、基本使用、功能详解以及最佳实践。希望这些内容能帮助你在实际项目中更好地应用 shallowRef,提升开发效率和应用性能。

通过合理使用 shallowRef,我们可以更加灵活地控制响应式行为,从而更高效地构建复杂的 Vue 3 应用。

http://www.lryc.cn/news/407774.html

相关文章:

  • 流量录制与回放:jvm-sandbox-repeater工具详解
  • 内网渗透—内网穿透工具NgrokFRPNPSSPP
  • 嵌入式中传感器数据处理方法
  • 生成式 AI 的发展方向,是 Chat 还是 Agent?
  • 金字塔监督在人脸反欺骗中的应用
  • vue3——两种利用自定义指令实现防止按钮重复点击的方法
  • Chrome谷歌浏览器Console(控制台)显示文件名及行数
  • Vue3+Element Plus 实现table表格中input的验证
  • 安宝特方案|解放双手,解决死角,AR带来质量监督新体验
  • Django教程(005):基于ORM操作数据库的部门管理系统
  • git等常用工具以及cmake
  • Mybatis(四)特殊SQL的查询:模糊查询、批量删除、动态设置表明、添加功能获取自增的主键
  • JS原型与原型链
  • Python编程学习第一篇——Python零基础快速入门(六)(4)异常处理
  • GraphHopper-map-navi_路径规划、导航(web前端页面版)
  • 2-46 基于matlab的声音信号的短时能量、短时过零率、端点检测
  • 力扣630.课程表 II
  • 数字IC后端流程简述
  • 数学建模--整数规划和非线性规划
  • Linux-查看dd命令进度
  • 高效微调 100 多种大语言模型:先计算法,急速推理!
  • opencv grabCut前景后景分割去除背景
  • qt--电子相册
  • 【MSP430】MSP430F5529几个定时器
  • 苍穹外卖(一)之环境搭建篇
  • 【限免】16PAM、16PSK、16QAM、16CQAM星座图及误码率【附MATLAB代码】
  • 09-软件易用性
  • FPGA开发——独立仿真和联合仿真
  • 基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(二)|| 堆 / 栈
  • ABAP+从SAP发出去的PDF文件在第三方系统出现乱码