Props
Tři espressa nejsou žádná nabídka. Každá PolozkaMenu má ukázat jinou položku, takže komponenta musí dostat data od svého rodiče, tedy komponenty, která ji používá, tady App.vue. K tomu slouží props (z anglického properties, vlastnosti): hodnoty, které rodič komponentě předá a které se píšou jako atributy prvku HTML:
<PolozkaMenu nazev="Espresso" :cena="55" />
<PolozkaMenu nazev="Zelený čaj" :cena="60" />Komponenta říká, jaké props přijímá, pomocí defineProps ve svém <script setup> a v šabloně je používá jako proměnné:
<script setup>
defineProps({
nazev: { type: String, required: true },
cena: { type: Number, required: true },
});
</script>
<template>
<li class="polozka">
<span>{{ nazev }}</span>
<span class="cena">{{ cena }} Kč</span>
</li>
</template>Každá z props má jméno a objekt, který ji popisuje:
typeje druh hodnoty:Stringpro text,Numberpro číslo,Booleanprotruenebofalse,Arraypro pole aObjectpro objekt.required: trueznamená, že ji rodič předat musí.defaultje hodnota, kterou má, když ji rodič nepředá, třebakategorie: { type: String, default: "káva" }.
Vue props za běhu aplikace kontroluje, a když nějaká chybí nebo má špatný typ, řekne to v konzoli: [Vue warn]: Missing required prop: "nazev". A defineProps se neimportuje: Vue ho v <script setup> zná samo.
Všimněte si dvojtečky v :cena="55". Je to v-bind, které znáte z :src: hodnota v uvozovkách je JavaScript, takže :cena="55" předá číslo 55. Bez dvojtečky je hodnota vždycky text. cena="55" předá text "55" a Vue varuje:
[Vue warn]: Invalid prop: type check failed for prop "cena". Expected Number with value 55, got String with value "55".Text tedy pište bez dvojtečky, jako nazev="Espresso", a všechno ostatní s ní: čísla, true a false, proměnné.
Jak psát:
Pokyny
- 1
V
PolozkaMenu.vuedeklarujte dvě povinné props:nazev, což je text, acena, což je číslo. Ukažte je místo Espresso a 55. VApp.vuedejte třem položkám jejich props: Espresso za 55 Kč, Cappuccino za 75 Kč a Zelený čaj za 60 Kč. V konzoli přitom nesmí být žádné varování. - 2
Přidejte třetí props,
kategorie: text, nepovinný, s výchozí hodnotou"káva". Ukažte ji místo slova káva a Zelenému čaji dejte kategoriičaj.