Podstawy React
13-03-2018 React React props state JSX DOM VDOMReact jest biblioteką języka programowania JavaScript, która służy do tworzenia interfejsów użytkownika. Interfejs użytkownika, UI – przestrzeń, w której następuje interakcja człowieka z maszyną.
Cechy które posiada REACT :
a) VDOM
Z głównych cech wyróżniających bibliotekę React.js jest wirtualny DOM.
React przechowuje cały DOM aplikacji w pamięci, po zmianie stanu wyszukuje różnice między wirtualnym i prawdziwym DOM i aktualizuje zmiany.
DOM- Document Object Model (Obiektowy Model Dokumentu)
VDOM- Virtual Document Object Model (Wirtualny Obiektowy Model Dokumentu)
b) Język JSX
Drugą z cech szczególnych React jest język JSX. Jest on nakładką na JavaScript, która dodaje możliwość wstawiania kodu HTML (lub komponentów React) bezpośrednio w kodzie, zamiast ciągu znaków.
2.Komponenty
Do utworzenia potężnej aplikacji wykorzystuje się małe zarządzalne komponenty.
Komponent jest to standardowy obiekt Javascriptowy, który odzwierciedla węzeł z drzewa DOM. Każdy może zawierać w sobie inne komponenty (jest to tak zwane drzewo komponentów). Pozwala to na rozbicie każdego z nich na mniejsze części, które są łatwiejsze w testowaniu, obsłudze oraz mogę być ponowne użyte w innych komponentach.
Komponenty
- upraszają budowę całej aplikacji,
- umożliwiają ponowne użycie napisanego kodu.
Co posiada reactowty component?
a) właściwości (props)
Parametryzowanie tego co wyświetla komponent.
Propsy są niemutowalne- propsów nie da się zmienić z wnętrza komponentu.
this.props
służy jako obiekt do odczytu.
Poniższy kod zawiera kilka prostych linii HTML. Znacznik dialog to element wbudowany w HTML5.
<div>
<dialog open>
<h1>Tytuł</h1>
<p>Treść</p>
</dialog>
</div>
Następnie zamieniamy taki kod na komponent, czyli tworzymy funkcję, która zwraca JSX:
function MyComponent() {
return (
<div>
<dialog open>
<h1>Tytuł</h1>
<p>Treść</p>
</dialog>
</div>
);
}
Niestety teraz aby zmienić tekst, musimy edytować kod samego komponentu, a to jest mało praktyczne. Czy można jakoś sparametryzować to co wyświetla komponent? Tak! Używając tzw. propsów.
Do tej pory komponentu używaliśmy w taki sposób: <MyComponent />
. Czyli jest to tak jakby element. A czy możemy dodać tutaj jakieś atrybuty? Właśnie tak! To dokładnie będą nasze propsy. Props to atrybut.
Podajmy więc tytuł i treść:
<MyComponent title="Tytuł" content="Treść" />
Teraz musimy jeszcze jakoś się odwołać do tych propsów i wyświetlić.
Propsy do komponentów przekazywane są po prostu jako argumenty. A konkretnie: Jeden argument, który jest obiektem. Funkcja przybiera taką postać:
function MyComponent({ title, content }) { … }
Jak teraz wyświetlić zawartość takiej zmiennej w JSX?
Wystarczy skorzystać ze składni {nazwa}
.
Ostatecznie otrzymujemy taki kod:
function MyComponent({ title, content }) {
return (
<div>
<dialog open>
<h1>{title}</h1>
<p>{content}</p>
</dialog>
</div>
);
}
Wyrenderowanie komponentu:
ReactDOM.render(
<MyComponent
title="Propsy"
content="Treść Propsów"
/>,
document.getElementById("app")
);
b) state
Wewnętrzy stan komponentu, służy do przechowywania stanu komponentu.
Ponadto, state
można mutować dzięki funkcji setState
.
stateful components komponent ze stanem
stateless components komponent bez stanu
Stan zawsze należy uaktualniać, wywołując metodę this.setState()
, która pobiera obiekt i scala go z istniejącymi danymi w obiekcie this.state
.
Po wywołaniu tej motody dochodzi do uaktualnienia interfejsu użytkownika.
Dochodzi to poprzez mechanizm kolejkowania, który efektywnie grupuje zmiany.
2. DWA SPOSOBY TWORZENIA KOMPONENTÓW
a) Za pomocą funkcji- jeśli nic się nie zmienia
b) Za pomocą klasy- jeśli coś się zmienia
3. Typy eksportów#
a) nazwane eksporty (ang. named export)
DWA SPOSOBY:
- Pierwszy to poprzedzenie deklaracji słowem kluczowym export. Eksportowanie zmiennych
let var, const, globalnych funkcji, klas
.
export var myVar1 = ···;
export let myVar2 = ···;
export const MY_CONST = ···;
- Umieszczamy w nawiasie klamrowym pojedyncza listę wszystkich eksportowanych modułów
const MY_CONST = ···;
function myFunc() {
···
}
export { MY_CONST, myFunc };
b) eksport domyślny (ang. default export)
export default function() {/*...*/}
export default () => {/*...*/}
export default class SomeClass {
/*...*/
}