Obsluha v props

Ve skutečné aplikaci jsou tlačítka ve vlastních komponentách: tlačítko Hlasovat je v komponentě KartaKapely. Co hlas udělá, ale patří do App, která má celý program festivalu a brzy i počty hlasů. App proto obsluhu napíše a každé kartě ji předá jako prop. V App.jsx:

function hlasuj(nazev) {
    console.log(`Váš hlas: ${nazev}`);
}

return (
    <ul>
        {kapely.map((kapela) => (
            <KartaKapely key={kapela.id} kapela={kapela} onHlasovat={hlasuj} />
        ))}
    </ul>
);

Funkce je hodnota jako každá jiná, takže může být v props stejně jako text nebo číslo. KartaKapely si ji z props vezme a zavolá ji, když se klikne na její tlačítko. V KartaKapely.jsx:

export default function KartaKapely({ kapela, onHlasovat }) {
    return (
        <li className="karta">
            <h2>{kapela.nazev}</h2>
            <button onClick={() => onHlasovat(kapela.nazev)}>Hlasovat</button>
        </li>
    );
}

Po kliknutí tlačítko spustí šipkovou funkci, ta zavolá onHlasovat("Sový sbor") a onHlasovat je funkce hlasuj z App. Kliknutí v kartě tak spustí kód v App. Karta nemusí vědět, co hlas udělá. Jen ohlásí, že někdo hlasoval pro její kapelu.

Prop se jmenuje onHlasovat, podobně jako onClick u tlačítka: on a co se stalo. Funkce, kterou App předává, je sloveso hlasuj. I to jsou zvyklosti: props pro obsluhy začínají on (v anglických projektech třeba onVote) a obsluhy dostávají slovesa (anglicky handleVote). onHlasovat je ale obyčejná prop. React ji sám nezavolá, jako volá onClick u tlačítka; volá ji KartaKapely.

Typická chyba: onClick={onHlasovat} v kartě. React pak zavolá onHlasovat s objektem události místo názvu a App vypíše Váš hlas: [object Object].

Pokyny

V App napište funkci hlasuj(nazev), která vypíše Váš hlas: Sový sbor s názvem, který dostane, a předejte ji každé KartaKapely jako prop onHlasovat. V KartaKapely.jsx si onHlasovat vezměte z props a po kliknutí na Hlasovat ji zavolejte s názvem kapely.

Totéž udělejte pro tlačítko Podrobnosti s prop onPodrobnosti. Karta ji zavolá s celým objektem kapela a funkce ukazPodrobnosti(kapela) v App vypíše Sový sbor: Lesní scéna, 16:00.

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

5/7

Další