Stateless Functional Component
SFC, albo Stateless Functional Component — tak profesjonalnie nazywają się te komponenty, które do tej pory tworzyliśmy. Bezstanowe, funkcyjne — dokładnie takie one są :) Spróbujmy przepisać SFC, które wcześniej stworzyliśmy na klasę:
function ContactItem({ login, name, department }) {
const imgUrl = `https://api.adorable.io/avatars/55/${login}.png`;
return (
<li className="item">
<img src={imgUrl} className="ui mini rounded image" />
<div className="content">
<h4 className="header">{name}</h4>
<div className="description">{department}</div>
</div>
</li>
);
}
Class w React.js
Korzystamy z klas znanych z ES2015. Klasa ta koniecznie musi dziedziczyć po React.Component
(lub PureComponent
— o tym kiedy indziej). Implementujemy w niej tylko jedną metodę: render
. Oto kod poniżej:
class ContactItem extends React.Component {
render() {
const { login, name, department } = this.props
const imgUrl = `https://api.adorable.io/avatars/55/${login}.png`;
return (
<li className="item">
<img src={imgUrl} className="ui mini rounded image" />
<div className="content">
<h4 className="header">{name}</h4>
<div className="description">{department}</div>
</div>
</li>
);
}
}
Widzisz jakieś znaczące różnice?
Po co Ci class w React.js?
Na razie nie widać żadnej przewagi klasy nad funkcją. I rzeczywiście — przy takich komponentach (prezentacyjnych) lepiej jest napisać funkcję niż klasę. Gdzie klasy wygrywają i co możemy z nimi zrobić?
Klasy nie istnieją bez powodu :) Oto kilka możliwości. Wszystkie omówimy w kolejnych częściach tego kursu:
- możliwość definiowania stanu komponentu (
state
), który sprawi, że Twoja aplikacja zacznie „żyć” - dostęp do metod cyklu życia komponentu (lifecycle methods), dzięki którym będziemy mogli reagować na różne wydarzenia
- możliwość definiowania fragmentów komponentów (każda funkcja może zwracać JSX!) jako metod w klasie — poprawa czytelności kodu
- możliwość tworzenia metod pomocniczych, z których można korzystać wewnątrz funkcji
render
. Na przykład do walidacji danych (przykład poniżej)
Przykładowo, jeśli korzystasz z jakiegoś modułu do formularzy w React, pewnie możesz napisać kod podobny do tego:
class MyForm extends React.Component {
render() {
return (
<Input name="nip" validate={[this.validateInput]} />
)
}
validateInput(value) {
return value && value.length === 10;
}
}
Co dalej?
Interakcje z komponentami. Poznasz też state
oraz metody cyklu życia. Czytanie ponad 40 artykułów może być przytłaczające, więc może zapisz się na szkolenie z React.
Jeśli chcesz na bieżąco śledzić kolejne części kursu React.js to koniecznie śledź mnie na Facebooku i zapisz się na newsletter.
Ćwiczenie
Ćwiczenie: Przepisz pozostałe komponenty na klasy. Czy napotkałeś/aś jakieś trudności? Napisz w komentarzu!