-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
77 additions
and
74 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,40 @@ | ||
## Prop `children` | ||
|
||
Stavění Reactových aplikací je založeno na skládání komponent. Díky tomu mohou být naše komponenty malé funkční celky, ze kterých skládáme větší díly celé naší aplikace. My jsme doposud vždy věděli, jakou konkrétní komponentu chceme použít uvnitř jiné komponenty a mohli jsme ji proto jednoduše naimportovat a v rodičovské komponentě použít. | ||
|
||
Jsou ale situace, kdy naše rodičovská komponenta dopředu neví, jaké jiné komponenty (nebo obecně JSX kód) bude obsahovat. Představte si například, že vytváříte komponentu `Sidebar` - pruh na levém či prvém okrají stránky, do kterého můžete skládat další *widgety*. Může v nich být třeba kalendář akcí, odkazy na nejnovější články, informace o počasí, reklama, atd. Obsah sidebaru neznáme dopředu - může se měnit v závislosti na nastavení naší aplikace (např. v administraci webu). | ||
|
||
Naše komponenty jsme zatím vždy používali jako nepárové značky, do kterých jsme posílali props. | ||
|
||
```jsx | ||
<AlmostPerfectComponent title="Skvělá komponenta" /> | ||
``` | ||
|
||
Nyní potřebujeme napsat komponentu `Sidebar` tak, aby akceptovala a uměla zobrazit jakékoliv potomky do ní pošleme. Třeba takto: | ||
|
||
```jsx | ||
<Sidebar title="Můj sidebar"> | ||
<Events /> | ||
<News /> | ||
<Weather /> | ||
</Sidebar> | ||
``` | ||
|
||
V Reactu je to naštěstí velmi jednoduché. V každé komponentě je k dispozici speciální prop nazvaná `children`, která obsahuje všechny do komponenty vnořené potomky. To mohou být další komponenty nebo třeba i obyčejné JSX elementy. | ||
|
||
Obsah prop `children` pak můžeme přímo vložit do JSX komponenty na místo, kde se nám to hodí. V našem případě dovnitř `<aside>` elementu. | ||
|
||
```jsx | ||
const Sidebar = ({children}) => { | ||
return ( | ||
<aside className="sidebar"> | ||
<h2>Sidebar</h2> | ||
{ children } | ||
</aside> | ||
); | ||
} | ||
``` | ||
|
||
Prop `children` tedy budeme využívat ve chvíli, kdy potřebujeme napsat komponentu, která má obalit další prvky nebo komponenty, ale my dopředu nevíme, jaké to budou. | ||
|
||
Časté použití jsou například různá dialogová okna, sidebary, nastylované boxy, ve kterých může být libovolný obsah, nebo obecné komponenty, které například řídí rozložení prvků na stránce. | ||
## Prop `children` | ||
|
||
Stavění Reactových aplikací je založeno na skládání komponent. Díky tomu mohou být naše komponenty malé funkční celky, ze kterých skládáme větší díly celé naší aplikace. My jsme doposud vždy věděli, jakou konkrétní komponentu chceme použít uvnitř jiné komponenty a mohli jsme ji proto jednoduše naimportovat a v rodičovské komponentě použít. | ||
|
||
Jsou ale situace, kdy naše rodičovská komponenta dopředu neví, jaké jiné komponenty (nebo obecně JSX kód) bude obsahovat. Představte si například, že vytváříte komponentu `Sidebar` - pruh na levém či prvém okrají stránky, do kterého můžete skládat další _widgety_. Může v nich být třeba kalendář akcí, odkazy na nejnovější články, informace o počasí, reklama, atd. Obsah sidebaru neznáme dopředu - může se měnit v závislosti na nastavení naší aplikace (např. v administraci webu). | ||
|
||
Naše komponenty jsme zatím vždy používali jako nepárové značky, do kterých jsme posílali props. | ||
|
||
```jsx | ||
<AlmostPerfectComponent title="Skvělá komponenta" /> | ||
``` | ||
|
||
Nyní potřebujeme napsat komponentu `Sidebar` tak, aby akceptovala a uměla zobrazit jakékoliv potomky do ní pošleme. Třeba takto: | ||
|
||
```jsx | ||
<Sidebar title="Můj sidebar"> | ||
<Events /> | ||
<News /> | ||
<Weather /> | ||
</Sidebar> | ||
``` | ||
|
||
V Reactu je to naštěstí velmi jednoduché. V každé komponentě je k dispozici speciální prop nazvaná `children`, která obsahuje všechny do komponenty vnořené potomky. To mohou být další komponenty nebo třeba i obyčejné JSX elementy. | ||
|
||
Obsah prop `children` pak můžeme přímo vložit do JSX komponenty na místo, kde se nám to hodí. V našem případě dovnitř `<aside>` elementu. | ||
|
||
```jsx | ||
const Sidebar = ({ children }) => { | ||
return ( | ||
<aside className="sidebar"> | ||
<h2>Sidebar</h2> | ||
{children} | ||
</aside> | ||
); | ||
}; | ||
``` | ||
|
||
Prop `children` tedy budeme využívat ve chvíli, kdy potřebujeme napsat komponentu, která má obalit další prvky nebo komponenty, ale my dopředu nevíme, jaké to budou. | ||
|
||
Časté použití jsou například různá dialogová okna, sidebary, nastylované boxy, ve kterých může být libovolný obsah, nebo obecné komponenty, které například řídí rozložení prvků na stránce. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
## Cvičení: Použití props Children | ||
|
||
::exc[cvlekce/rozbalovaci-box] | ||
## Cvičení: Použití props Children | ||
|
||
::exc[cvlekce/rozbalovaci-box] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
## Cvičení: UI knihovny | ||
|
||
::exc[cvlekce/ui-knihovna] | ||
## Cvičení: UI knihovny | ||
|
||
::exc[cvlekce/ui-knihovna] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,9 @@ | ||
--- | ||
title: UI pomocí knihovny Geist | ||
demand: 3 | ||
--- | ||
|
||
Jedna z méně známých, ale extrémně snadno použitelných knihoven je např. [knihovna Geist](https://geist-ui.dev/en-us). Není tak rozsáhlá jako jiné, známější knihovny, ale pojďme si ji vyzkoušet. | ||
|
||
1. Založ si nový projekt pomocí `create-czechitas-app`. | ||
1. Prostuduj [dokumentaci](https://geist-ui.dev/en-us) knihovny Geist a zkus pomocí jejích komponent udělat stejnou aplikaci, jakou jsme předtím dělali společně v lekci pomocí React Bootstrap. | ||
--- | ||
title: UI pomocí knihovny Geist | ||
demand: 3 | ||
--- | ||
|
||
Jedna z méně známých, ale extrémně snadno použitelných knihoven je např. [knihovna Geist](https://geist-ui.dev/en-us). Není tak rozsáhlá jako jiné, známější knihovny, ale pojďme si ji vyzkoušet. | ||
|
||
1. Založ si nový projekt pomocí `create-czechitas-app`. | ||
1. Prostuduj [dokumentaci](https://geist-ui.dev/en-us) knihovny Geist a zkus pomocí jejích komponent udělat stejnou aplikaci, jakou jsme předtím dělali společně v lekci pomocí React Bootstrap. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,16 @@ | ||
## UI knihovny | ||
|
||
Nyní, když umíme používat prop `children`, uměli bychom si vytvořit knihovnu vlastních prvků uživatelského rozhraní, které by šlo jednoduše skládat do sebe v libovolných kombinacích. Taková knihovna standardizovaných může výrazně urychlit tvorbu složitějších aplikací. | ||
|
||
Protože nejsme první, koho to napadlo, takových hotových knihoven už existuje spousta a my je můžeme použít. | ||
|
||
Mezi nejznámější patří třeba: | ||
|
||
* [Ant Design](https://ant.design/) | ||
* [MUI](https://mui.com/) | ||
* [Mantine](https://mantine.dev/) | ||
* [React Bootstrap](https://react-bootstrap.github.io/) | ||
* [Semantic UI](https://react.semantic-ui.com/) | ||
* [Onsen UI](https://onsen.io/react/) | ||
|
||
Existují doslova desítky (možná stovky) dalších, méně známých knihoven. Každá má svoje výhody a nevýhody. Některé mají více nebo méně zabudovaných komponent, některé se snadněji používají. | ||
## UI knihovny | ||
|
||
Nyní, když umíme používat prop `children`, uměli bychom si vytvořit knihovnu vlastních prvků uživatelského rozhraní, které by šlo jednoduše skládat do sebe v libovolných kombinacích. Taková knihovna standardizovaných může výrazně urychlit tvorbu složitějších aplikací. | ||
|
||
Protože nejsme první, koho to napadlo, takových hotových knihoven už existuje spousta a my je můžeme použít. | ||
|
||
Mezi nejznámější patří třeba: | ||
|
||
- [Ant Design](https://ant.design/) | ||
- [MUI](https://mui.com/) | ||
- [Mantine](https://mantine.dev/) | ||
- [React Bootstrap](https://react-bootstrap.github.io/) | ||
- [Semantic UI](https://react.semantic-ui.com/) | ||
- [Onsen UI](https://onsen.io/react/) | ||
|
||
Existují doslova desítky (možná stovky) dalších, méně známých knihoven. Každá má svoje výhody a nevýhody. Některé mají více nebo méně zabudovaných komponent, některé se snadněji používají. |