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

vue 中 props 直接解构的话会数据丢失响应式

项目中,vue父子组件传参时,如果直接解构的话会丢失响应式

<script setup>const props = defineProps({count: Number});let { count } = props;count++;console.log(props.count) // 结果0,count并不会发生变化
<script>

想解构成响应式数据需要使用 toRefs 或 toRef

  • toRefs:用于将一个响应式对象转换为一个普通对象,其中每个属性都是一个 ref 对象。这允许在解构时保持响应性。
  • toRef:用于创建一个 ref 对象,引用响应式对象的某个属性。
  • 当使用 reactive 创建一个响应式对象时,对象的属性是响应式的,但直接解构(如 const { name } = state)会使 name 变成普通值,失去响应性。
  • toRefs 和 toRef 通过创建 ref 对象来包装属性,确保在解构后属性仍能响应式更新。

例子1

<script setup>import {toRef, toRefs} from 'vue';const props = defineProps({msg: String,count: Number});// _msg是响应式的,会随着props.msg改变const _msg = toRef(props,'msg');// msg,count也是响应式的,会随着props改变const { msg, count } = toRefs(props);
<script>

例子2

<script setup>
import { reactive, toRefs } from 'vue';// 创建一个响应式对象
const state = reactive({name: 'Alice',age: 30
});// 使用 toRefs 解构,保持响应性
const { name, age } = toRefs(state);
// 现在 name 和 age 都是 ref 对象,可以通过 .value 访问
console.log(name.value); // 输出: 'Alice'
// 修改原对象,name 和 age 会响应式更新
state.name = 'Bob';
console.log(name.value); // 输出: 'Bob'// 使用 toRef 解构单个属性
const nameRef = toRef(state, 'name');
// 现在 nameRef 是一个 ref 对象
console.log(nameRef.value); // 输出: 'Alice'
<script>

注意点

  • 响应性保持:解构后的 ref 对象会同步更新原对象的值,反之亦然。
  • 性能:toRefs 和 toRef 是轻量级操作,不会导致性能问题。
  • 错误场景:避免直接解构响应式对象(如 const { name } = state),这会导致 name 失去响应性。
  • 替代方案:在 Vue 3 中,也可以使用 ref 创建独立响应式变量,但 toRefs 和 toRef 更适合处理对象属性。
http://www.lryc.cn/news/605878.html

相关文章:

  • MakeInstaller: 一款麒麟操作系统安装包制作工具
  • 3DXML 转换为 UG 的技术指南及迪威模型网在线转换推荐
  • DeepSeek笔记(三):结合Flask实现以WEB方式访问本地部署的DeepSeek-R1模型
  • 戴尔笔记本Ubuntu18.04 NVIDIA驱动与cuda环境配置教程
  • 【国内电子数据取证厂商龙信科技】内存取证
  • 工业绝缘监测仪:保障工业电气安全的关键防线
  • Towers
  • AI+金融,如何跨越大模型和场景鸿沟?
  • NXP i.MX8MP GPU 与核心库全景解析
  • mac操作笔记
  • C++ 入门基础(2)
  • MySQL自动化安装工具-mysqldeploy
  • 关于AR地产发展现状的深度探究​
  • 【AI大模型】披着羊皮的狼--自动化生成越狱提示的系统(ReNeLLM)
  • 无人机传感器系统架构解析
  • 客户服务自动化:如何用CRM减少50%人工工单?
  • HOOPS Exchange技术架构全解析:打造高效CAD/BIM数据导入与导出引擎
  • AR智能巡检:制造业运维效率提升的关键
  • AR-Align-NN-2024
  • 11.结构体
  • 项目中如何定义项目范围
  • Python:如何从地球大数据科学服务中心批量下载VPM-GPP?
  • 《Java 程序设计》第 17 章 - 并发编程基础
  • Ceph、K8s、CSI、PVC、PV 深入详解
  • ros2 tf2详解
  • 从 0 到 1:PHP 基础到就业教程指南(附教程资料)
  • ceph sc 设置文件系统格式化参数
  • Python 程序设计讲义(48):组合数据类型——字典类型:字典的常用操作
  • 商旅平台怎么选?如何规避商旅流程中的违规风险?
  • 云原生技术创新中的安全和合规问题有哪些解决方案?