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

Vue3中父组件将一个ref定义的对象类型传递给子组件的解包机制

在Vue3中,当父组件将一个ref定义的对象类型传递给子组件时,子组件接收到的不是原始的Ref类型,而是该ref.value值,即被解包后的响应式对象。具体行为如下:

关键点解析:

  1. 自动解包机制
    Vue3在模板中会自动解包ref,因此在父组件中传递ref给子组件的prop时,实际传递的是ref.value(即内部值)。子组件接收到的prop会是一个普通的对象(若ref的值是对象),而非Ref类型。

  2. 响应式保持
    如果父组件的ref值是对象,Vue会通过reactive()自动将其转换为响应式代理。因此,子组件接收到的对象仍然是响应式的。直接修改该对象的属性会触发响应式更新,父子组件的状态会同步。

  3. 验证示例

    • 父组件传递ref对象:

      vue

      <template>
        <Child :myProp="myRef" />
      </template>
      <script setup>
      import { ref } from 'vue';
      const myRef = ref({ name: 'Parent' });
      </script>
    • 子组件接收prop

      vue

      <template>
        <!-- 直接使用属性,无需.value -->
        <div>{{ myProp.name }}</div>
      </template>
      <script setup>
      defineProps(['myProp']);
      </script>
    • 子组件的myProp是解包后的对象,直接访问myProp.name即可,且修改myProp.name会触发父组件更新。

注意事项:

  • 直接修改对象属性
    若子组件修改接收到的对象属性(如myProp.name = 'new'),会同步修改父组件的状态,因为两者引用同一个响应式对象。

  • 替换整个对象
    如果子组件需要替换整个对象,应通过事件通知父组件修改ref.value。直接赋值(如myProp = {})不会影响父组件,因为prop是只读的。

总结:

父组件的ref对象传递给子组件后,子组件接收到的是解包后的响应式对象,而非Ref类型。因此,在子组件中无需使用.value访问,直接操作属性即可保持响应式。

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

相关文章:

  • 用Python构建区块链健康数据管理系统——隐私与信任的新纪元
  • python——正则表达式
  • vue3中defineProps的使用说明
  • Python 实现的运筹优化系统数学建模详解(0-1规划背包问题)
  • PHP:从诞生到未来的Web开发利器
  • 数据结构和大数据处理及其加密算法
  • SMB 协议
  • uniApp 设置动态tabs(不是自定义tab哈)
  • 在执行生信分析的时候提示缺少一些R包的报错解决
  • WebForms ViewState
  • SnowNLP 使用大全
  • Scala Iterator(迭代器)
  • 算法进阶指南 袭击
  • 蓝桥杯 跑步计划(模拟日期)
  • JMeter从入门到荒废-常见问题汇总
  • go游戏后端开发30:弃牌逻辑与后续操作
  • vue3中左右布局两个个组件使用vuedraggable实现左向右拖动,右组件列表可上下拖动
  • rook-ceph xx/xxx objects misplaced (xx%)
  • 基于大模型应用技能的学习路径
  • NO.80十六届蓝桥杯备战|数据结构-字符串哈希|兔子与兔子(C++)
  • CCRC 与 EMVCo 双认证:中国智能卡企业的全球化突围
  • git 总结遇到的问题
  • B+树与红黑树
  • 第三章:SQL 高级功能与性能优化
  • CentOS 中下载rpm包并安装
  • PhpStorm配置函数和文件注释模板
  • Python设计模式:工厂模式
  • 凯斯西储大学CWRU数据集变体
  • python中的数据模型-pydantic浅讲
  • 02_SQL分库分表及Java实现