Я хочу создать компонент с текстовой областью и передать данные внутри него, например
<c-textarea> hello world </c-textarea>
но классический тег <slot/> не работает внутри текстовой области
какая самая простая и чистая альтернатива
<template>
<textarea><slot/></textarea>
</template>
в Vue.js 3



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете извлечь содержимое слота:
<template>
<textarea>{{ $slots.default ? $slots.default()[0].children : ''}}</textarea>
</template>
По сути, это создает слот вручную, что дает вам элемент VNode, где children содержит содержимое слота.
Я бы действительно попытался найти другой способ, это грубо, подвержено ошибкам и, скорее всего, не то, что вы хотите сделать.
Лично я бы придерживался подхода v-model.
Вы должны использовать value и input для привязки контента вместо использования slot
Вот обновленная версия компонента CTextarea
<template>
<textarea :value = "modelValue" @input = "$emit('update:modelValue', $event.target.value)">
</textarea>
</template>
<script>
export default {
name: 'CTextarea',
emits: ['update:modelValue'],
props: {
modelValue: String,
},
};
</script>
проверьте это пробное демо