It’s used to share things (like functions or data) from a child component to its parent — but only if you want to.
Let’s see what it is, why you need it, and how to use it.
💡 Why Use defineExpose
?
When you use the <script setup>
style in Vue 3, everything inside is private by default. That means a parent component can’t access anything inside a child component — unless you expose it.
That’s where defineExpose()
comes in.
🧪 Example: Expose a Method to the Parent
👶 ChildComponent.vue
<template> <button @click="increment">Clicked {{ count }} times</button> </template> <script setup> import { ref } from 'vue' const count = ref(0) function increment() { count.value++ } function reset() { count.value = 0 } // 👇 Make reset() available to the parent defineExpose({ reset }) </script>
👨👩👧 ParentComponent.vue
<template> <ChildComponent ref="childRef" /> <button @click="resetChild">Reset from Parent</button> </template> <script setup> import { ref } from 'vue' import ChildComponent from './ChildComponent.vue' const childRef = ref(null) function resetChild() { childRef.value.reset() // Call child’s reset() method } </script>
✅ When to Use It
Use defineExpose
if:
- You want the parent to call a method in the child (like reset, submit, etc.)
- You want to get data from the child component
⚠️ Notes
- Only works inside
<script setup>
- Only needed if parent uses
ref
to access the child - Keeps your code clean and controlled by exposing only what’s needed
Top comments (0)