Časovače a úklid

Efekty jsou také místo pro časovače. V kurzu JavaScriptu jste je spouštěli pomocí setInterval() a zastavovali pomocí clearInterval(). V Reactu je spustí efekt. Tady je odpočet do otevření bran festivalu:

import { useEffect, useState } from "react";

export default function OdpocetBran() {
    const [zbyva, setZbyva] = useState(60);

    useEffect(() => {
        const id = setInterval(() => {
            setZbyva((zbyva) => zbyva - 1);
        }, 1000);
        return () => clearInterval(id);
    }, []);

    return <p>Brány se otevřou za {zbyva} s</p>;
}

Důležité jsou tu tři věci:

  • Závislosti []. Interval se spustí jednou, když se komponenta objeví, a pak běží sám. Bez pole by se efekt spouštěl po každém vykreslení, tedy každou sekundu, a pokaždé by interval zastavil a spustil znovu.
  • Aktualizační funkce. Funkce intervalu vznikla při prvním vykreslení, kdy bylo zbyva 60, a tuhle hodnotu si drží. setZbyva(zbyva - 1) by tak pořád dokola nastavovalo 59. Aktualizační funkce dostane pokaždé aktuální hodnotu.
  • Úklid. Funkce, kterou efekt vrátí, je jeho úklid. React ji zavolá, když komponenta ze stránky zmizí, a také předtím, než efekt spustí znovu, protože se změnila některá závislost. Tady interval zastaví.

Proč interval úklid potřebuje? Komponenta může zmizet, zatímco její interval pořád běží. V tomto cvičení časovač zmizí, když koncert skončí. Bez úklidu se to interval nedozví: dál mění stav komponenty, která už na stránce není, a to tak dlouho, dokud je stránka otevřená. A pokaždé, když se časovač znovu ukáže, přidá se k němu další interval.

Pokyny

V CasNaPodiu.jsx přidejte efekt se závislostmi [], který spustí interval: každých 1000 milisekund zvětší sekundy o 1 pomocí aktualizační funkce (sekundy) => sekundy + 1. Id intervalu si uložte do konstanty id, budete ho potřebovat v dalším kroku.

Zastavte interval úklidem: efekt vrátí () => clearInterval(id). Než ho přidáte, podívejte se, co změní: dejte do funkce intervalu console.log("tik");, ukončete koncert a sledujte konzoli. Tiky pokračují. S úklidem skončí, jakmile skončí koncert.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

Zpět

3/9

Další