Hledání v jiné komponentě

Další dvojice komponent, které potřebují stejný stav: textové pole pro hledání v PoleHledani a program v SeznamKapel. Během psaní má seznam ukazovat jen kapely, které hledání odpovídají. Teď textové pole řídí stav v PoleHledani a SeznamKapel na něj nevidí. Je to stejná situace jako u oblíbených kapel, a tak má i stejné řešení: hledani se přesune výš, do App, jejich nejbližšího společného rodiče.

PoleHledani pak dostane text a funkci, kterou zavolá s novým textem. Jeho textové pole zůstane řízené, jen teď stavem, který je v App:

export default function PoleHledani({ hledani, onZmenitHledani }) {
    return (
        <input
            className="hledani"
            placeholder="Hledat kapelu"
            value={hledani}
            onChange={(event) => onZmenitHledani(event.target.value)}
        />
    );
}

App drží stav a předá ho dolů spolu s jeho funkcí set…: <PoleHledani hledani={hledani} onZmenitHledani={setHledani} />. setHledani je funkce jako každá jiná, takže ji můžete předat dolů, tak jak je: když se textové pole změní, zavolá PoleHledani funkci onZmenitHledani s novým textem, a to je setHledani komponenty App.

A vyfiltrovaný seznam? Ten se spočítá z kapely a hledani, takže ani on není stav. App kapely vyfiltruje při vykreslení a komponentě SeznamKapel předá jen ty, které má ukázat. Tady je stejný nápad s filtrem podle dne:

const zobrazeneKapely = kapely.filter((kapela) => kapela.den === den);

Aby hledání nebralo ohled na velká písmena, porovnejte oba texty malými písmeny, pomocí toLowerCase() z kurzu JavaScriptu: "Noční vlaky".toLowerCase() je "noční vlaky".

Pokyny

Přesuňte hledani výš do App a předejte ho komponentě PoleHledani spolu s funkcí onZmenitHledani. Komponentě SeznamKapel dejte jen kapely, jejichž název obsahuje hledaný text, bez ohledu na velká písmena: NOČ najde Noční vlaky.

Když hledání neodpovídá žádná kapela, ukažte Hledání neodpovídá žádná kapela. v odstavci s třídou prazdne.

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/6

Další