当前位置: 首页 > 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.dtcms.com/a/307438.html

相关文章:

  • 在 CentOS 7 安装中文字体
  • 法国声学智慧 ,音响品牌SK (SINGKING AUDIO) 重构专业音频边界
  • vue+ts 基础面试题 (二)
  • 正向运动学(Forward Kinematics,简称FK)和逆向运动学(Inverse Kinematics,简称IK)
  • Java项目:基于SSM框架实现的校园活动资讯网管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
  • 分类-鸢尾花分类
  • 佳维视工业显示器在除尘与过滤设备中的应用
  • 7800系列三端固定式线性稳压器的典型应用电路
  • MakeInstaller: 一款麒麟操作系统安装包制作工具
  • 进阶向:YOLOv11模型轻量化
  • TGD第九篇:三维应用——视频边缘检测
  • 爱普生002墨水与004墨水基本参数及支持机型
  • 【10】大恒相机SDK C++开发 ——对相机采集的原图像数据IFrameData裁剪ROI 实时显示在pictureBox中,3种方法实现(效率不同)
  • 零基础构建MCP服务器:TypeScript/Python双语言实战指南
  • 某讯视频风控参数逆向分析
  • 《C#与.NET Core跨平台开发的融合架构与实践逻辑》
  • 基于STM32的智能温控通风系统设计
  • Web 开发 08
  • 前端核心技术Node.js(四)——express框架
  • 【JavaEE】(7) 网络原理 TCP/IP 协议
  • 前端下载的EXCEL文件无法打开的解决办法
  • 9.Linux 调优与性能检测
  • 前端框架Vue3(四)——组件通信及其他API
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第一天(HTML5)
  • Java WEB技术-序列化和反序列化认识(SpringBoot的Jackson序列化行为?如何打破序列化过程的驼峰规则?如何解决学序列化循环引用问题?)
  • Amazon RDS for MySQL成本优化:RDS缓存降本实战
  • 三坐标测量机路径规划与补偿技术:如何用算法看见微米级误差?
  • 抖音集团基于Paimon的流式数据湖应用实践
  • 常见的中间件漏洞如tomcat,weblogic,jboss,apache靶场攻略
  • wpf之ContentPresenter