Život komponenty
Až dosud komponenta prostě byla: App ji ukázala a ona zůstala. S v-if ale komponenta může přijít i odejít. Každá komponenta má svůj životní cyklus, kroky, kterými za svůj život projde, a Vue ji jimi provede:
- Vytvoření (created): Vue spustí
<script setup>komponenty. Její refy a funkce už existují, ale na stránce zatím nic není. - Připojení (mounted): Vue vytvoří prvky šablony a vloží je do stránky.
- Aktualizace (updated): když se změní stav komponenty, Vue její prvky aktualizuje. To se může stát mnohokrát.
- Odpojení (unmounted): Vue komponentu odstraní ze stránky, třeba když přestane platit
v-if, které ji ukazuje. Její prvky i stav zmizí.
V těchto chvílích můžete spustit vlastní kód. Vue má pro každou z nich funkci, funkci životního cyklu (anglicky lifecycle hook): onMounted(), onUpdated() a onUnmounted(). Importujete je z "vue", zavoláte je nahoře v <script setup> a předáte jim funkci, kterou Vue v tu chvíli zavolá. Tady je komponenta s počítadlem šálků, která do konzole píše, co se s ní děje:
<script setup>
import { onMounted, onUnmounted, onUpdated, ref } from "vue";
const salky = ref(0);
console.log("Vytvořena");
onMounted(() => {
console.log("Připojena");
});
onUpdated(() => {
console.log("Aktualizována");
});
onUnmounted(() => {
console.log("Odpojena");
});
function pridejSalek() {
salky.value++;
}
</script>
<template>
<button @click="pridejSalek">Šálky: {{ salky }}</button>
</template>App ji ukazuje pomocí <Pocitadlo v-if="ukazat" />. Když ji ukážete, jednou kliknete na její tlačítko a zase ji skryjete, konzole ukáže:
Vytvořena
Připojena
Aktualizována
OdpojenaVytvořena je první, a to bez funkce životního cyklu: kód nahoře v <script setup> běží hned, když Vue komponentu vytváří. Funkce předané onMounted() a ostatním běží až později, každá ve svou chvíli.
Když komponentu ukážete znovu, Vue vytvoří novou: konzole znovu ukáže Vytvořena a Připojena a šálky začnou od 0. Odpojená komponenta se už nevrátí a její stav zmizí s ní. Stav, který má zůstat, patří komponentě, která na stránce zůstává, třeba App, která ho pak komponentám předává v props, jako v lekci Události komponent.
Nejčastěji budete používat onMounted a onUnmounted: v dalších cvičeních budete po připojení komponenty načítat data a při jejím odpojení zastavovat časovač. onUpdated potřebujete jen zřídka.
Typické chyby:
- Chybějící import: konzole hlásí
ReferenceError: onMounted is not defined. - Volání místo funkce:
onMounted(console.log("Připojena"))vypíše text hned při vytvoření komponenty a při připojení Vue ohlásíTypeError: hook is not a function. Funkce životního cyklu potřebuje funkci, kterou Vue zavolá později:onMounted(() => { … }).
Jak psát:
Pokyny
- 1
V
Specialita.vueimportujteonMounteda po připojení komponenty vypište do konzoleSpecialita připojena. Klikněte naUkázat specialitu dnea podívejte se do konzole. - 2
Při odpojení komponenty vypište
Specialita odpojena. Přidejte kousek nebo dva, specialitu skryjte a znovu ukažte: konzole ukáže, že se odpojila a znovu připojila, a kousky začínají zase od 0.