Jak działa react
stan + propsy = ui
Najłatwiej będzie pokazać na przykładzie. Otwórz proszę https://reactjs.org/
Czym jest komponent
Komponenty pozwalają nam na podzielenie aplikacji na reużywalne i odizolowane elementy. Zamiast pracować na jednym wielkim elementem (np. całą stroną) możemy go podzielić na mniejsze elementy (np. formularz kontaktowy, galerię, sekcję o mnie).
Można o komponencie myśleć jak o funkcji - otrzymuje jakieś dane i zwraca elementy do wyświetlanie na stronie.
Komponenty możemy zagnieżdżać tworząc hierarchię np:
Strona kontaktu > formularz > input
Komponent składa się z 3 głównych części:
- stanu
- propsów
- cyklu życia
Czym są propsy
Właściwości otrzymywane od rodzica. Komponent ich nie modyfikuje samemu, propsy traktujemy jako read-only.
Na przykład mamy formularz, w którym jest przycisk. Formularz mu może przekazać jaka jaki jest w nim tekst, co ma zrobić po kliknięciu i jakiego jest typu
class Form extends React.Component {
submitForm () {
// jakaś funkcja do wysyłania formularza
}
render() {
return (
<form>
{/* reszta formularza */}
<Button type="submit" onClick={this.submitForm} label="Wyślij">
</form>
)
}
}
Natomiast sam button musi tylko ładnie wyglądać, dane i zachowanie przychodzą z zewnatrz
class Button extends React.Component {
render() {
return <Button type={this.props.type} onClick={this.props.onClick} label={this.props.label} />;
}
}
Czym jest stan
Coś wewnętrznego i ulotnego dla komponentu. Komponent może je modyfikować
class Checkbox extends React.Component {
state = {
isChecked: false,
};
handleChange = (event) => {
this.setState({ name: isChecked.target.checked });
};
render() {
return (
<label htmlFor="register-checkbox">
Checkbox
<input type="checkbox" id="register-checkbox" onChange={this.handleCheckboxChange} checked={this.state.agreementChecked} />
</label>
);
}
}
Czym jest cykl życia
Komponent przechodzi przez różne fazy i na każdej z nich możemy coś zrobić. Komponent (między innymi):
- Montuje się w DOM
- Aktualizuje się
- Jest usuwany z DOM
W momencie każdego z tych wydarzeń możemy coś zrobić np:
- Po zamontowaniu strony produktów możemy zrobić zapytanie do API po listę produktów
- Po zmianie wartości inputa możemy przeładować listę produktów
- Przy wyjściu ze strony produktów możemy zrobić zapytanie do naszego narzędzia do analizy (np. czy użytkownik miał rzeczy w koszyku)