vue3的组件间通信ref子组件需要把父组件要的ref数据开放

文章目录

vue3子组件需要把父组件要的ref数据开放

Vue3 比 Vue2 更"封闭、更安全",默认不对外暴露任何东西!

1. 先回忆 Vue2

Vue2 不管是 data 、 methods 、 computed ......

只要你写在组件里,父组件通过 $refs 全都能拿到!

javascript 复制代码
js
  
// Vue2
data() {
  return { money: 100 }
},
methods: {
  fn() {}
}

// 父组件直接用
this.$refs.children1.money = 200
this.$refs.children1.fn()
 

Vue2 的问题:

  • 不安全 → 父组件随便改子组件内部数据
  • 不规范 → 子组件管不住自己的东西

2. Vue3 彻底改了

javascript 复制代码
在  <script setup>  里:
内部变量、函数,默认全部是 私有 的!
 
js
  
// 子组件
let money = ref(9999) // 默认是私有的
function fn() {}     // 默认也是私有的
 
 
父组件就算拿到实例,也访问不到!
 
js
  
children1.value.money // undefined
children1.value.fn() // 报错
 
 
为什么要这么设计?
 
- 安全:子组件自己决定哪些能给外面用
- 规范:父不能乱改子内部
- 低耦合:组件更独立

3. 所以才需要 defineExpose()

它的作用就是:

我允许外面用的,我才暴露!

javascript 复制代码
js
  
defineExpose({
  money, // 只有这个,父组件才能访问
})

最终对比(最清晰)

  • Vue2:默认全公开 → 不安全
  • Vue3 :默认全封闭 → 安全
    → 想让外面用,必须 手动 defineExpose

Vue2 直接用实例就行,因为默认都暴露

Vue3 更封闭,默认不暴露,所以要 defineExpose

这就是 Vue3 比 Vue2 更严谨、更工程化 的地方。

相关推荐
用户059540174462 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen2 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
名字还没想好☜2 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉2 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上3 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978333 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒3 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
程序员黑豆4 小时前
鸿蒙应用开发:AttributeModifier 使用教程
前端·harmonyos
codeniu4 小时前
TRAE Work 实战 | 从"有个想法"到线上Demo,我全程只靠对话就完成了
前端·trae
妙码生花4 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十):增加管理员角色组管理
前端·后端·ai编程