Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як оголошувати props?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Props** можна оголошувати двома способами: в **Options API** через об'єкт `props` з типами й опціями (`type`, `required`, `default`, `validator`), або в **Composition API** через `defineProps()` у `<script setup>`. **Ключове:** у `<script setup>` можна одразу деструктурувати результат `defineProps()` без втрати реактивності, бо Vue сам застосовує `toRefs` під капотом.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняProps можна оголошувати **двома способами**, залежно від того, який API ти використовуєш: **Options API** або **Composition API (**`setup` **/** `<script setup>`**)**. На співбесіді важливо знати **обидва**. --- ## 1. Оголошення props в Options API У компоненті ти вказуєш об'єкт `props`: ```js export default { props: { title: String, count: Number, isActive: Boolean, } } ``` Кожна властивість - це **prop**, яка може бути передана батьком. Можна вказати розширену конфігурацію: ```js props: { title: { type: String, required: true }, count: { type: Number, default: 0 }, user: { type: Object, default: () => ({}) // важливо: об'єкти через функцію } } ``` --- ## Аргументи в Options API Можна задавати: - `type` - тип даних - `required` - обов'язковий проп - `default` - значення за умовчанням - `validator` - кастомна перевірка --- ## 2. Оголошення props в Composition API: setup() Якщо використовуєш `setup()`, props передаються **першим аргументом**: ```js export default { props: { title: String, count: Number }, setup(props) { console.log(props.title) console.log(props.count) } } ``` **Важливо:** props - read-only, їх не можна змінювати. --- ## Деструктуризація в setup() → втрачаєш реактивність Не можна так: ```js const { title } = props // втрачається реактивність ``` Правильно: ```js import { toRefs } from 'vue' const { title, count } = toRefs(props) ``` --- ## 3. Оголошення props в `<script setup>` (Vue 3) Це найзручніший і найсучасніший спосіб. Використовується функція `defineProps()`: ```vue <script setup> const props = defineProps({ title: String, count: Number }) </script> ``` Можна одразу деструктурувати (реактивність зберігається!): ```vue <script setup> const { title, count } = defineProps({ title: String, count: Number }) </script> ``` --- ## Чому в `<script setup>` можна деструктурувати? Тому що `defineProps` під капотом викликає `toRefs`, якщо ти робиш деструктуризацію - Vue сам перетворює властивості на реактивні refs. --- ## Приклад з типами props (розширений) ```vue <script setup> const props = defineProps({ user: { type: Object, required: true }, list: { type: Array, default: () => [] }, isActive: Boolean, count: { type: Number, default: 1, }, validatorProp: { validator: v => ['small', 'medium', 'large'].includes(v) } }) </script> ```Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.