Ответ
defineExpose — это функция в Vue 3 Composition API, которая позволяет явно указать, какие свойства или методы компонента должны быть доступны извне через ref.
По умолчанию, в <script setup> все переменные и методы инкапсулированы. Если нужно, чтобы родительский компонент мог их использовать, их нужно "экспонировать".
Пример:
<script setup>
import { ref } from 'vue';
const internalValue = ref('Секретно');
const publicMethod = () => alert('Доступно снаружи!');
defineExpose({
publicMethod,
value: internalValue
});
</script>Родительский компонент:
<template>
<ChildComponent ref="childRef" />
</template>
<script setup>
import { ref, onMounted } from 'vue';
const childRef = ref(null);
onMounted(() => {
childRef.value.publicMethod(); // Работает
console.log(childRef.value.value); // 'Секретно'
});
</script>Без defineExpose доступ к internalValue и publicMethod был бы невозможен.