Podstawy
1 godz. 31 min · Typescript · Full-stack i Programowanie
Adam GospodarczykTypeScript umożliwia opisanie naszego kodu typami oraz wychwytywanie dotyczących ich błędów na wczesnym etapie developmentu. W efekcie wykorzystanie TypeScript'u w projekcie podnosi jego jakość i zmniejsza ryzyko pomyłek, które mogą być nie wychwycone na etapie testowania lub mogą pojawić się dopiero w środowisku produkcyjnym.
Z pomocą Reacta tworzymy coraz bardziej złożone aplikacje w których ryzyko popełnienia błędów jest wysokie. TypeScript nie tylko je zmniejsza ale również wpływa pozytywnie na tzw. developer experience (doświadczenia programisty) poprzez to, że nasze IDE "wie więcej" na temat kodu który piszemy. A to z kolei przekłada się na lepszą wydajność i komfort pracy.
Przy założeniu że znamy już samego Reacta oraz TypeScript, połączenie tych dwóch umiejętności jest stosunkowo proste. Wystarczy poznać ogólne zasady typowania propsów, komponentów oraz hooków aby z powodzeniem móc wykorzystywać zalety płynące z posiadania typów w naszym kodzie. W tym kursie dowiesz się jak to zrobić, w najszybszy możliwy sposób.
Kurs został przygotowany tak aby na prostych przykładach pokazać Ci w jaki sposób wykorzystywać TypeScript w projektach React.js. Jeżeli szukasz źródła które pozwoli Ci szybko zacząć - jesteś w dobrym miejscu.
Materiał zawiera dobre praktyki i sugestie dotyczące wykorzystania TypeScript'u oraz konfiguracji środowiska pracy (np. IDE) oraz ustawień samego projektu. Jest to wiedza którą możesz wykorzystać również w przypadku pracy z innymi technologiami.
Kurs został przygotowany z myślą o osobach, które znają już React oraz TypeScript i chcą dowiedzieć się w jaki sposób połączyć te umiejętności. Materiał niemal całkowicie pomija informacje na temat mechanizmów Reacta oraz TypeScript'u. Jeżeli potrzebujesz poszerzyć swoją wiedzę na ich temat, zapraszamy Cię do naszych pozostałych kursów.
To w tym momencie przechodzimy do
kolejnego zadania dotyczącego typowania komponentów i konkretnie posłużymy się
tutaj przygotowaniem Render less Component, czyli jak sama nazwa wskazuje
komponentem, który nie renderuje nam niczego, ale służy do np.
dodania określonej logiki.
Przykładem takiej logiki może być pobranie danych z naszego API.
Zatem przygotujemy teraz komponent o nazwie Fetch, do którego będziemy
przekazywać adres URL kierujący do konkretnego API.
Ale oczywiście w tym momencie nie będziemy
pobierać danych z bazy, tylko posłużymy się danymi wpisanymi z palca.
Jeżeli chodzi o zawartość tego komponentu, to do niego
przekażemy funkcję, z pomocą której będziemy wyświetlać nowy komponent w
zależności od statusu oraz pobranych danych.
Zatem w sytuacji, gdy będziemy mieli stan
ładowania będziemy będziemy pokazywać określony komunikat i
tak samo będzie to w przypadku wystąpienia ewentualnego błędu.
No i ostatecznie, gdy dane zostaną pobrane
poprawnie, wyświetlimy komponenty list, do którego przekażemy pobrane dane oraz
przekażemy render, z pomocą którego wygenerujemy poszczególne elementy listę.
Zatem teraz musimy zająć się przygotowaniem tego konkretnie komponentu.
Zrobienie tego nie jest zbyt skomplikowane ze względu na to, że w przypadku listy
musimy po prostu odebrać przekazane propsy, a następnie zbudować tutaj element
URL oraz poszczególne elementy listy wykorzystując metodę map.
Tutaj po prostu tworzymy nowy element
HTML, do którego przekażemy funkcję event ładujące konkretny element.
Oczywiście ewentualnie moglibyśmy zrobić
tak, że ta funkcja również by dodawała ten otaczający element,
natomiast w tym przypadku wydaje mi się to zupełnie wystarczające.
Drugim komponentem, które musimy tutaj przygotować jest komponent fetch.
W jego przypadku sytuacja jest nieco
bardziej złożona, ponieważ będziemy musieli wyskoczyć trochę w przyszłość, o
których typowaniu będziemy mówić w kolejnych lekcjach.
Przede wszystkim wykorzystamy tutaj US
State, wewnątrz którego będziemy przechowywać status oraz dane pobrane z
naszego API i tutaj ustawię jakąś wartość domyślną.
Następnie wykorzystując juz efekt będzie pobierać nasze dane.
Normalnie byśmy tutaj uderzali do
przekazanego URL z pomocą procesów, a w tym przypadku po prostu ręcznie ustawimy
dane symulując poprawne zakończenie zapytania.
W momencie gdy to będzie gotowe wywołujemy tutaj funkcję przekazaną jako Props child
i w tym momencie posiadając taki komponent jesteśmy gotowi do tego, aby zaimportować
jeszcze US State oraz Just Efekt, a następnie zająć się dodaniem typów.
I w tym momencie będę prosił Cię o wzmożoną uwagę.
W pierwszej kolejności musimy dodać alias typu określający stan pobierania danych.
I w tym przypadku skorzystamy z Uni String litera type.
Do tego, aby określić poszczególne stany nie ma tutaj nic nadzwyczajnego.
Następnie musimy określić typ dla poszczególnego elementu naszej listy.
I tutaj konkretnie chodzi o ten obiekt.
Czyli mamy dwie właściwości typu string oraz Number.
Znowu nie ma tutaj żadnych wyzwań.
Idąc dalej musimy zdefiniować typ naszego
stanu i tutaj chodzi konkretnie o ten obiekt.
Czyli mamy tutaj status.
Do którego przypisujemy typ status, który
zdefiniowaliśmy tutaj, a następnie mamy typ Data, który będzie wykorzystywać typ
generyczny wykorzystujący aktualną strukturę pobieranego obiektu.
Czyli w tym przypadku będziemy odwoływać się do Ideas ITM.
Zatem aby się nie powtarzać utworzymy sobie tutaj alias typu,
do którego wykorzystując zapis genetyczny przekazujemy interfejs Alice Item.
Dzięki temu mamy tutaj alias typu wskazujący na interfejs naszego stanu, a
jednocześnie przekazujemy do niego typ naszego obiektu.
No to teraz możemy zadbać jeszcze o typ
naszych procesów, czyli dokładnie obiektu znajdującego się tutaj.
W przypadku adresu URL mamy tutaj do czynienia ze string, a w przypadku
children mamy do czynienia z funkcją, która przyjmuje state.
I jeżeli chodzi o typ tego stanu, to wykorzystujemy alias, które utworzyliśmy
tutaj my i ostatecznie z funkcji tej zostaje zwracany elementy.
W tym momencie nie pozostaje nic innego
jak po prostu przypisać te typy do poszczególnych obiektów.
W przypadku psów nie ma tutaj żadnej
tajemnicy, a w przypadku US State wykorzystujemy tutaj zapis generyczny.
Potem będziemy sobie jeszcze mówić.
Przy czym tutaj oczywiście nie chodzi nam o typ psów, tylko o typ stanu.
Zatem szybko naprawiam moją pomyłkę i przechodzimy dalej.
Jeżeli chodzi o efekt, w tym momencie nie
wymagane są to żadne typy, ponieważ wszystko jest tutaj jak widzisz w
porządku, ale poniżej musimy jeszcze coś załatwić.
Konkretnie musimy określić typ dla psów listę.
W tym przypadku utworzymy sobie nowy interfejs zawierający właściwość items,
który wskazuje na typ właściwości data pochodzący z typu naszego stanu,
Czyli konkretnie chodzi o właściwość, którą mamy tutaj.
Zatem w związku z tym, że wykorzystujemy
tutaj typ generyczny, a konkretnie tablicę zawierającą elementy określonego typu,
to tak naprawdę wskazujemy na interfejs znajdujący się tutaj.
Zatem mam nadzieję, że jest to dla Ciebie jasne, aczkolwiek polecam Ci zatrzymać ten
film i zajrzeć w przykłady tej lekcji, aby dokładnie odnaleźć się w tym kodzie.
A tymczasem idąc dalej mamy tutaj drugą właściwość, która jest funkcją
przyjmującą jako parametr pojedynczy obiekt pochodzący z naszego stanu.
I tutaj znowu odwołam się do właściwości
data, ale konkretnie w związku z tym, że mamy tam tablicę.
Odwołam się do pierwszego elementu.
Dzięki temu uzyskam tutaj elastycznie dostęp do dokładnie tego typu.
Ostatnim elementem będzie wartość zwracana przez tą funkcję.
I tutaj konkretnie zwracamy dokładnie taką
samą wartość, jaką przyjmujemy jako parametr.
Dzięki temu w momencie gdy wykorzystam ten typ i przypisze go do naszych procesów,
wszystkie błędy nam znikną, a nasz komponent będzie gotowy.
Zatem jak widzisz znowu wykorzystaliśmy
wiedzę na temat TypeScript do tego, aby obsłużyć render less component.
Mam nadzieję, że ten przykład pokazał Ci
kilka użytecznych rzeczy, a tymczasem dziękuję Ci za uwagę i zapraszam do
kolejnych lekcji dotyczących typowania łuków.