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.
W tej lekcji pokażę Ci w jaki sposób pracować z domyślnymi opcjami.
I swoją drogą.
W poprzedniej lekcji pokazałem Ci w jaki sposób pracować z opcjonalnym tip top sami
i jednocześnie ustawiać ich domyślne wartości.
Jak wiesz, w przypadku jak funkcjonuje coś takiego jak default,
czyli generalnie właściwości funkcji przypisywana jest w przypadku komponentów
funkcyjnych bądź też właściwości klasy w przypadku komponentów klasowych.
Normalnie to właśnie z pomocą Default
Group określiliśmy domyślne wartości dla klapsów, Natomiast w tym przypadku
zdecydowanie lepiej jest zastosować sposób, który pokazałem tutaj.
Czyli generalnie bezpośrednio w przypadku
przekazanego obiektu ustawić domyślne wartości.
Ewentualnie moglibyśmy zrobić tak, że po prostu nie podawali byśmy tutaj wszystkich
właściwości, tylko zrobili po prostu w ten sposób.
Dzięki temu w przypadku gdybyśmy posiadali
więcej procesów, to po prostu może okazać się to nieco bardziej wygodne.
Tak czy inaczej chciałbym teraz pokazać Ci w jaki sposób pracować z Default.
Ze względu na to, że pomimo tego, że raczej odchodzi się od ich wykorzystywania
i nawet jeżeli spojrzymy sobie teraz na Twój temat, to widzimy jasno, że domyślne
właściwości obiektów przeważają w znaczącym stopniu nad default groups.
To oznacza, że ich przyszłość nie jest do końca jasna.
Wracając jednak do naszego kodu, zobaczmy w jaki sposób możemy sobie z nimi radzić.
Przede wszystkim zróbmy tak, aby uprościć nasze komponenty user i w ten sposób
rezygnujemy już z tych dodatkowych pól i w zamian umieszczamy pole active, które w
tym momencie znajduje się w samym ciele komponentu.
Dokładnie tutaj.
Natomiast musimy dodać do niego jeszcze typ.
Będzie to pole przechowujące wartość logiczną.
I teraz w zależności od tego, czy użytkownik jest aktywny czy też nie,
będziemy dodawać do niego odpowiednią klasę.
No i tutaj jeszcze musimy zadbać o to, aby
przekazać odpowiednie propsy i tak naprawdę wszystko jest tutaj w porządku.
Oczywiście teraz nie jest, ponieważ pole Active nie jest opcjonalne.
Natomiast jeżeliby było, to w zasadzie w tym przypadku jesteśmy w
domu, bo nawet jeżeli ta wartość nie zostanie przekazana, to i tak nie będzie
wartością prawdziwą i wszystko wykona się tutaj poprawnie.
Zresztą jeżeli teraz znajdziemy na nią, to
zobaczymy, że może to być wartość logiczna bądź wartość undefined.
Jeżeli jednak chcielibyśmy dokładnie
określić jej wartość, to moglibyśmy tutaj po prostu utworzyć obiekt default props,
który następnie możemy przypisać do naszego użytkownika.
No i teraz nasza sytuacja nie za bardzo uległa zmianie ze względu na to, że dalej
mamy tutaj wartość logiczną bądź undefined, a wynika to z faktu, że musimy
połączyć ten nasz interfejs, a w zasadzie musimy go zmienić teraz na alias typu
i za pomocą sekcji połączyć go z naszym obiektem.
W ten sposób w momencie gdy przekażemy ten typ do naszego komponentu, to nagle
okazuje się, że rzeczywiście wszystko jest w porządku.
Mamy tutaj wartość logiczną niezależnie od
tego, czy ten zostanie podany czy też nie, ze względu na to, że w przypadku nie
podania tego zostanie czytana wartość domyślne.
No i teraz mam nadzieję, że w tym kontekście wszystko jest tutaj jasne.
Zatem, aby dodać domyślne propsy do
naszego komponentu funkcyjnego, musimy w pierwszej kolejności przypisać odpowiednią
właściwość zawierającą obiekt przechowujący domyślne wartości.
Następnie musimy uwzględnić jego typ w definicji props dla tego komponentu.
W tym przypadku skorzystaliśmy z sekcji
typu i dzięki temu uzyskaliśmy dość elastyczną strukturę.
No to teraz zobaczmy w jaki sposób wygląda to w przypadku komponentów klasowych.
Zatem utwórzmy sobie teraz analogiczny
obiekt User 2, który będzie komponentem klasowym.
I tutaj jeżeli chodzi o propsy, o tym swoją drogą będziemy jeszcze mówić.
Przekazujemy je wykorzystując klasę genetyczną.
Jeżeli chodzi o sam typ, to mamy tutaj.
Za chwilę go sobie zdefiniujemy, a
tymczasem musimy przypisać właściwość statyczną o nazwie default props.
I tu jak widzisz ustawiamy wartości, które nas interesują.
Natomiast aby to wszystko działało musimy zdefiniować również odpowiedni typ.
I tutaj podobnie jak w poprzednim przypadku posłużymy się operatorem typeof
do tego aby pobrać typ właściwości default props, która jest statyczna, więc możemy
odwołać się do niej dokładnie w ten sposób, a następnie wykorzystamy sekcję
typów do tego, aby połączyć tutaj obiekt zawierający typy pozostałych właściwości.
Zatem efekt końcowy jest tutaj całkiem podobny.
I swoją drogą mamy tutaj jeszcze jeden
mały błąd wynikający z tego, że nie wykorzystałem tutaj słowa kluczowego DI.
Natomiast swoją drogą chciałbym, abyś
zobaczył teraz w jaki sposób IntelliJ pomaga mi z importowanie takich klas.
Zwróć uwagę, że prosi mnie tutaj po prostu wciśnięcie klawisza Owszem Enter.
Do tego, aby zaimportować tą klasę i
faktycznie to się stało tutaj automatycznie.
Mamy tutaj oczywiście błąd wynikający z ESD, więc jeżeli teraz zapiszę plik,
wszystko jest w porządku i w ten sposób IntelliJ pomaga mi w codziennej pracy.
Wracając już tutaj w Switchu, to mamy
tutaj kompletną definicję default props natomiast.
Natomiast swoją drogą nic nie stoi na
przeszkodzie, abyśmy jeszcze wykorzystali tutaj nasz element DOM i w ten sposób
musimy się jeszcze odwołać do odpowiednich właściwości.
No i wszystko jest tutaj w porządku.
Rzeczywiście, jak sobie jedziemy na
właściwość Active, no to mamy tutaj wartość logiczną.
Zatem jak widzisz, doszliśmy tutaj do punktu, w którym zdefiniowaliśmy wartości
domyślnych procesów zarówno w przypadku komponentu funkcyjnego, jak i klasowego.
I tak naprawdę to.
Wszystko co musisz wiedzieć na ten temat,
ale chciałbym tylko zwrócić Twoją uwagę, że wykorzystywanie default props raczej
już nie jest rekomendowane i w zamian wykorzystujemy możliwość ustawienia
domyślnych wartości dla obiektu dokładnie tak jak to robiliśmy tutaj.
Zatem w tym momencie to już wszystko słyszymy się za chwilę w następnej lekcji.