This shows you the differences between two versions of the page.
|
pw:laboratoare:12 [2020/05/02 16:20] ciprian.dobre [Componente utile] |
pw:laboratoare:12 [2020/05/04 11:01] (current) ciprian.dobre [Exercitii] |
||
|---|---|---|---|
| Line 26: | Line 26: | ||
| </code> | </code> | ||
| + | ===== Bootstrap Grid Layout ===== | ||
| + | |||
| + | Pentru a construi cu usurinta un layout responsive, Bootstrap pune la dispozitie un grid flexbox. Acesta vine cu un sistem de containere, randuri si coloane, pentru a aranja continutul in pagina. Pe fiecare rand pot fi asezate un numar de pana la 12 coloane, cu dimensiuni variabile, in functie de setarile specificate si de device-ul pe care sunt afisate. Sunt disponibile, by default, optiuni pentru 5 clase de device-uri: xs (<576px), sm (≥576px), md (≥768px), lg (≥992px), xl (≥1200px). | ||
| + | |||
| + | |||
| + | ==== Container ==== | ||
| + | |||
| + | Containerele ofera posibilitatea de a centra si alinia orizontal continutul paginii. Acestea sunt responsive, max-width modificandu-se in functie de dimensiunea viewport-ului. Daca se specifica optiunea "fluid", ele vor avea width 100% intotdeauna. | ||
| + | |||
| + | {{:pw:laboratoare:lab12_scr01.png|}} | ||
| + | |||
| + | <code Javascript> | ||
| + | <Container> //<Container fluid> --> width 100% | ||
| + | <Row> | ||
| + | <Col>1 of 1</Col> | ||
| + | </Row> | ||
| + | </Container> | ||
| + | </code> | ||
| + | |||
| + | ==== Auto-layout columns ==== | ||
| + | |||
| + | Cand nu se specifica nicio dimensiune, componentele //Col// vor avea dimensiuni egale. | ||
| + | |||
| + | {{:pw:laboratoare:lab12_scr02.png|}} | ||
| + | |||
| + | <code Javascript> | ||
| + | <Container> | ||
| + | <Row> | ||
| + | <Col>1 of 2</Col> | ||
| + | <Col>2 of 2</Col> | ||
| + | </Row> | ||
| + | <Row> | ||
| + | <Col>1 of 3</Col> | ||
| + | <Col>2 of 3</Col> | ||
| + | <Col>3 of 3</Col> | ||
| + | </Row> | ||
| + | </Container> | ||
| + | </code> | ||
| + | |||
| + | Daca pentru una dintre coloane se specifica o dimensiune, atunci toate celelalte coloane isi vor schimba automat dimensiunea, ramanand egale intre ele. | ||
| + | |||
| + | {{:pw:laboratoare:lab12_scr03.png|}} | ||
| + | |||
| + | <code Javascript> | ||
| + | <Container> | ||
| + | <Row> | ||
| + | <Col>1 of 3</Col> | ||
| + | <Col xs={6}>2 of 3 (wider)</Col> | ||
| + | <Col>3 of 3</Col> | ||
| + | </Row> | ||
| + | <Row> | ||
| + | <Col>1 of 3</Col> | ||
| + | <Col xs={5}>2 of 3 (wider)</Col> | ||
| + | <Col>3 of 3</Col> | ||
| + | </Row> | ||
| + | </Container> | ||
| + | </code> | ||
| + | |||
| + | ==== Rows ==== | ||
| + | |||
| + | Componenta //Row// permite setarea dimensiunilor coloanelor din interiorul ei pentru toate cele 5 viewport-uri predefinite (xs, sm, md, lg, xl). Pentru fiecare viewport, se poate specifica numarul de coloane care incap una langa alta. | ||
| + | |||
| + | {{:pw:laboratoare:lab12_scr04.png|}} | ||
| + | |||
| + | <code Javascript> | ||
| + | <Container> | ||
| + | <Row xs={2} md={4} lg={6}> | ||
| + | <Col>1 of 2</Col> | ||
| + | <Col>2 of 2</Col> | ||
| + | </Row> | ||
| + | <Row xs={1} md={2}> | ||
| + | <Col>1 of 3</Col> | ||
| + | <Col>2 of 3</Col> | ||
| + | <Col>3 of 3</Col> | ||
| + | </Row> | ||
| + | </Container> | ||
| + | </code> | ||
| ===== Componente ===== | ===== Componente ===== | ||
| React Bootstrap ofera o serie de componente utile in orice aplicatie web, ce usureaza procesul de dezvoltare. Pentru a utiliza o componenta din Bootstrap, aceasta trebuie mai intai importata. Codul de mai jos importa o componenta de alerta. | React Bootstrap ofera o serie de componente utile in orice aplicatie web, ce usureaza procesul de dezvoltare. Pentru a utiliza o componenta din Bootstrap, aceasta trebuie mai intai importata. Codul de mai jos importa o componenta de alerta. | ||
| Line 200: | Line 277: | ||
| Rezultatul codului de mai sus este: | Rezultatul codului de mai sus este: | ||
| - | {{ :pw:laboratoare:react-card.png?500 |}} | + | {{ :pw:laboratoare:react-card.png?500&nolink |}} |
| + | |||
| + | === Carousel === | ||
| + | [[https://react-bootstrap.github.io/components/carousel/|Carousel-ul]] este folosit pentru galeriile foto. Componenta **Carousel** contine mai multe tag-uri <Carousel.Item> in care se adauga imagini (<img>) si, optional, <Carousel.Caption>. | ||
| + | |||
| + | === Pagination === | ||
| + | Un exemplu de paginare este disponibil in [[https://react-bootstrap.github.io/components/pagination/|documentatia oficiala]]. | ||
| + | React Bootstrap ofera doar partea de prezentare a componentei, logica fiind facuta de developer. Astfel, la fiecare click pe un <Pagination.Item>, continutul vazut de utilizator trebuie sa se schimbe. | ||
| + | Prin urmare, pe componenta <Pagination> atasam o functie evenimentului //click// ce va fi executata de fiecare data cand se schimba o pagina. | ||
| + | |||
| + | <code javascript> | ||
| + | constructor(props){ | ||
| + | super(props) | ||
| + | this.pageChanged = this.pageChanged.bind(this); | ||
| + | } | ||
| + | |||
| + | pageChanged(e){ | ||
| + | // e.target.text contine numarul paginii | ||
| + | console.log(e.target.text); | ||
| + | } | ||
| + | |||
| + | <Pagination onClick={this.pageChanged}> | ||
| + | ... | ||
| + | </Pagination> | ||
| + | </code> | ||
| + | |||
| + | |||
| ===== JSON Placeholder ===== | ===== JSON Placeholder ===== | ||
| Line 226: | Line 330: | ||
| - [1p] Printr-un request de tip GET accesati toate albumele disponibile pe webserver-ul JSONPlaceholder. | - [1p] Printr-un request de tip GET accesati toate albumele disponibile pe webserver-ul JSONPlaceholder. | ||
| - [2p] Fiecare album va fi reprezentat intr-o componenta de tip **Card**. | - [2p] Fiecare album va fi reprezentat intr-o componenta de tip **Card**. | ||
| - | - Card image reprezinta prima poza din album (hint: afisati thumbnailUrl) | ||
| - Card title este numele albumului | - Card title este numele albumului | ||
| - Card text este informatia despre utilizatorul care a facut albumul, sub forma "by {username} aka {name}" | - Card text este informatia despre utilizatorul care a facut albumul, sub forma "by {username} aka {name}" | ||
| - | - [2p] Afisati intr-o pagina toate albumele. Folositi componenta **Pagination** pentru a reprezenta cate 10 albume pe pagina. | + | - [Bonus] Card image reprezinta prima poza din album (hint: afisati thumbnailUrl) |
| + | - [3p] Afisati intr-o pagina toate albumele. Folositi componenta **Pagination** pentru a reprezenta cate 10 albume pe pagina. | ||
| - [1p] La click pe un album trimiteti un request de tip GET pentru a accesa pozele albumului respectiv | - [1p] La click pe un album trimiteti un request de tip GET pentru a accesa pozele albumului respectiv | ||
| - | - [4p] Afisati pozele intr-o componenta **Carousel**. | + | - [3p] Afisati pozele intr-o componenta **Carousel**. |