Idziemy dalej, bo jeszcze sporo przed nami, aby się przebić do ciekawych rzeczy. Zbieramy do kupy wiedzę z Reacta i TSa robiąc na razie proste ćwiczenia, ale łączymy React + TS. Do dzieła!
Ok, poprzednio napisaliśmy sobie self-closing (obowiązkowo) komponent, z domyślnym propsem stringowym i niczym więcej:
import { ReactElement } from "react"
type HeadingProps = { title?: string };
const Heading= ({ title = 'default title' } : HeadingProps): ReactElement => {
return <h1>{title}</h1>
}
//(parameter) title: string
export default Heading;
Teraz napiszemy sobie komponent, który obowiązkowo przyjmuje tytuł i obowiązkowo przyjmuje dzieci. Najpierw piszemy propsy:
type SectionProps = {
title: string,
children: JSX.Element
};
Children będą typu JSX.Element. Ok, teraz dekompozycja propsów z anotacją i export:
const Section = ({ title, children} : SectionProps ) => {
return (
<>
<h1>{title}</h1>
{children}
</>
)
}
export default Section;
To jest mega prosty React i bardzo prosty TypeScript. Jedyna warstwa trudności to to, że mamy tutaj jedno z drugim. Ok, użyjmy teraz tego w App.tsx.
Pamiętajmy o imporcie, użyjmy go sobie:
<Section title="My Section">
<p>Bla bla bla</p>
</Section>
Tak jak to mamy, to nie przejdzie ani bez dziecka ani bez tytułu. Z drugiej strony, aby mieć kilka dzieci, musimy użyć fragmentu:
<Section title="My Section">
<>
<p>Bla bla bla</p>
<p>Bla bla bla</p>
<p>Bla bla bla</p>
</>
</Section>
Ok, działa. Więcej TSowego Reacta już niedługo!