Professional Documents
Culture Documents
03 REACT v1
03 REACT v1
REACT
*Istnieją metody tzw. dynamicznego importu komponentów (tzw. Lazy Loading) pozwalający na Code Splitting.
Kod komponentów ładowany jest na życzenie
STRATEGIE RENDEROWANIA STRON WWW
1.Static Site Generation (SSG) – Gatsby, Astro
1. Strony są generowane w czasie budowy aplikacji i serwowane jako gotowe pliki
HTML.
2. Zawartość jest statyczna i taka sama dla wszystkich użytkowników.
3. Brak interakcji z serwerem (np. bazą danych), bardzo szybkie renderowanie
strony
4. Bardzo dobra optymalizacja dla silników wyszukiwania (SEO)
2.Client-Side Rendering (CSR) – React
1. Zawartość strony jest renderowana w przeglądarce użytkownika przy użyciu
JavaScript.
2. Strona, którą otrzymuje użytkownik, jest początkowo pusta lub zawiera tylko
minimalny szkielet, a cała zawartość ładuje się i renderuje po stronie klienta.
3. Prędkość renderowania zależy od klienta, słaba optymalizacja SEO – robot
indeksujący musi „uruchomić” JavaScript
3.Server-Side Rendering (SSR) – NextJS
1. Strony są renderowane na serwerze dla każdego żądania
2. Użytkownik otrzymuje kompletnie wyrenderowaną stronę, co jest korzystne
dla SEO i początkowej wydajności ładowania.
3. Możliwość buforowania stron - Incremental Static Regeneration (ISR)
WEBPACK – SERWER DEWELOPERSKI
• Serwer deweloperski (debugowanie i odświeżanie)
• Służy łączeniu kodu (ang. Bundle) i usuwaniu nieużywanego kodu
(ang. tree-shaking)
• Integruje narzędzia transpilujące kod (np. Babel)
• Konfigurowalny za pomocą webpack.config.js
REACT
React to biblioteka JavaScript do
tworzenia interfejsów
użytkownika, która została
stworzona przez Facebook (Meta).
Jest ona wykorzystywana do
budowania aplikacji, w których
potrzebna jest szeroka interakcja z
użytkownikiem.
REACT CECHY
• Komponentowy – React jest oparty na komponentach, co oznacza, że
aplikacja składa się z małych, izolowanych części, które można łatwo
testować i ponownie używać.
• Działa na wirtualnym drzewie DOM (vDOM) - aktualizując tylko te
fragmenty DOM które uległy zmianie. Aktualizacą DOM zajmuje się
algorytm Uzgodnienia (ang. Reconciliation) stanowiący sedno
działania React
REACT CECHY - KOD DEKLARATYWNY A IMPERATYWNY
• Paradygmat imperatywny - skupia się na opisie krok po kroku, jak coś ma być wykonane.
• Kod deklaratywny - mówimy komputerowi co ma dla nas zrobić, opisujemy wynik który chcemy
otrzymać. Pozwala skupić się na wyniku a nie na sposobie w jaki rozwiązujemy problem.
KOMPONENT
Komponent może być funkcją lub klasą. Reprezentuje pewien fragment
aplikacji
Transpilator
Przeglądarka
KOMPONENT W TYPESCRIPT
Parametry komponentu mogą być
zarówno opisane typem jak i
interfejsem Komponent musi mieć nazwę pisaną wielką literą (to go odróżnia)
Aktualizacja wartości zwyczajnej zmiennej nie Aktualizacja wartości stanu bezpośrednio nie
spowoduje aktualizacji komponentu spowoduje aktualizacji komponentu (należy użyć
setera!)
Funkcja czysta (ang. pure function) Funkcja z efektami ubocznymi (ang. impure function)
Efekt uboczny w programowaniu odnosi się do sytuacji, w której funkcja lub wyrażenie modyfikuje stan
zewnętrzny lub ma obserwowalną interakcję z zewnętrznymi stanami poza swoim własnym zakresem. Innymi
słowy, efekt uboczny występuje, gdy operacja powoduje zmiany poza swoim lokalnym środowiskiem, które
mogą wpłynąć na wykonanie innych części programu.
USEEFFECT – OBSŁUGA EFEKTÓW UBOCZNYCH W REACT
• Logika renderująca nie może zawierać efektów ubocznych
• Czym są efekty uboczne? Wszystko co dzieje się „poza” komponentem
• Zdarzenia przeglądarki (np. zmiana wielkości okna)
• Timery (setInterval, setTimeout)
• Czynności które wymagają czyszczenia (np. subskrypcje danych z sieci)
• Coś ma być uruchomione tylko raz przy montowaniu komponentu (np. zapytanie API)
• Reagowanie na zmianę parametrów lub stanu
• Kod umieszczony w useEffect zadziała po każdym renderowaniu lub gdy
zmianie ulegną wartości zadane w zależnościach (dependancies) – drugim
parametrze - useEffect(fun, [deps])
• UseEffect może zwrócić funkcję uruchamianą podczas usuwania
komponentu z DOM (odmontowywania, ang. unmounting)
USEEFFECT useEffect(fun, [deps])
Efekt zostanie uruchomiony zostanie za każdym razem gdy stan count się zmieni,
ponieważ w drugim argumencie mamy count
USEEFFECT – ZMIANA PROPS
Początkowy stan komponentu jest ustawiany
na podstawie propsa initial
Używać rozważnie,
„cachowanie” nie jest
za darmo
3
ERRORBOUNDARIES (GRANICE BŁĘDÓW)
• Przechwytywanie i obsługę błędów w komponentach
ERRORBOUNDARIES (GRANICE BŁĘDÓW)
• Biała strona śmierci
(ang. white screen of death)
• F12 lub narzędzia programistów
• Zakładka: Konsola
ERRORBOUNDARIES - ROZWIĄZANIE
xhr.onerror = () => {
// obsluga wyjatku komunikacyjnego!
};
xhr.send();
FETCH VS XMLHTTPREQUEST
• Przeglądarka implementuje dwa API komunikacyjne
• XMLHttpRequest
• API opracowane w 1999 na potrzeby AJAX (Asynchronous JavaScript and XML)
• Strumienie są cachowane w pamięci
• Wparcie dla postępu pobierania danych
• Wparcie dla Timeout
• Wparcie dla przerwania połączenia
• Fetch
• Natywne API opracowane w 2015
• Wspiera Cache (no-store, force-cache itp.)
• Wpiera no-cors (w ograniczonym stopniu)
• Wpiera streaming danych (możliwość pobrania danych w częściach, przykład dużego pliku csv)
• Dostępny w node (od wersji 18)
• Wyjątek powoduje tylko błąd sieci
• Brak wsparcia dla postępu pobierania danych ani timeout
• Przerwanie połączenia możliwe przy użyciu AbortController
Jeśli nie musisz wspierać BARDZO STARYCH przeglądarek powinieneś użyć fetch
ROZWIĄZANIA OPARTE BIBLIOTEKI STRON TRZECICH
• Implementacje oparte o XMLHttpRequest
• Axios (https://github.com/axios/axios)
• Implementacje oparte o fetch
• Ky (https://github.com/sindresorhus/ky) – tylko przeglądarka
• Gaxios (https://github.com/googleapis/gaxios)
• Got (https://www.npmjs.com/package/got) – tylko Node
• Undici (https://undici.nodejs.org/#/) – tylko Node
if (!response.ok) {
throw new HTTPError(`Fetch error: ${response.statusText}`);
}