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.
Podczas gdy wiemy już, w jaki sposób
wykorzystywać te typy w przypadku komponentów funkcyjnych oraz klasowych.
Musimy iść dalej i zobaczyć, jak to
wygląda chociażby na przykładzie komponentów generycznych.
Tutaj sytuacja nieco się różni, ponieważ zbudujemy tutaj nieco bardziej
zaawansowany komponent, który będzie wyświetlał nam Select box, przy czym
będziemy mogli pracować na niego z danymi różnego typu.
Zacznijmy od tego, aby zdefiniować sobie
nasz nowy komponent, który będzie formularzem wyświetlający nasz Select box.
Wewnątrz tego komponentu musimy mieć dostępne opcje, które normalnie będą
pochodziły z bazy danych, a w tym przypadku wystarczy nam kodowana tablica.
Następnie wykorzystamy juz stado do tego, aby wykorzystać tutaj możliwość ustawienia
stanu w momencie gdy będziemy wybierać jakąś konkretną opcję.
No i ostatecznie wyświetlamy nasz formularz, a w zasadzie element, który
będzie zawierał jakiś tytuł oraz nasz Select box.
Sam Select box będzie tutaj przyjmować
propsy takie jak Options, czyli dokładnie tablicę, którą mamy tutaj.
Następnie value, czyli nasz aktualny stan i ostatecznie zdarzenie on Change, które
będzie przekazywane do niego tak aby po zmianie opcji zaktualizował się nasz stan.
No to teraz nie pozostaje nic innego jak utworzyć komponent Select.
Jeżeli chodzi o ten komponent, to tak
naprawdę znowu mamy komponent funkcyjny, do którego przekazujemy propsy, które za
chwilę sobie zdefiniujemy, ale zaczniemy od tego, aby wyświetlić jego zawartość.
Będzie to po prostu element HTML typu SELECT, którego wartość ustawimy na
przekazany tutaj props oraz oczywiście będziemy reagować na zmianę opcji
odwołując się do metody update, którą za chwilę sobie utworzymy.
Jeżeli chodzi o jego zawartość to będziemy tutaj wyświetlać opcje, które również będą
pochodziły z procesów, a konkretnie będą pochodziły z tego miejsca.
Zatem w momencie gdy skorzystamy tutaj z
opcji map, one zostaną wyświetlone, o ile umieścimy je w odpowiednim elemencie HTML.
No to teraz nie pozostaje nic innego jak
utworzyć metodę Update value, która zajmie się tym, aby pobrać aktualnie wybrany
element, następnie odnaleźć go na liście dostępnych opcji i w ten sposób uzyskamy
dostęp do właściwości Value, a tym samym odwołując się do
Change będziemy w stanie wykonać dokładnie tą metodę i zaktualizować nasz stan.
Zatem sytuacja teraz wygląda tak, że wszystko jest tutaj kompletne,
natomiast naszym zadaniem jest teraz dodanie tutaj typów.
Sytuacja raczej nie jest tutaj bardzo
skomplikowana ze względu na to, że w pierwszej kolejności musimy zadbać o to,
aby dodać typ naszej wybranej opcji i w tym przypadku będzie to string.
Następnie musimy utworzyć typ opisujący obiekty, które znajdują się tutaj.
Czyli mamy tutaj do opisania dwie właściwości typu string, więc nie ma tutaj
żadnych wyzwań przed nami, a następnie musimy określić również typ
dla psów przekazywanych do komponentu Select.
Jeżeli chodzi o te propsy, mamy tutaj do typowania Options Value oraz On Change.
Jeżeli chodzi o nas, jest to tablica zawierająca obiekty, które posiadają
dokładnie taką strukturę, więc zapisuję to w ten sposób.
Następnie mamy właściwość Value i będzie to String.
No i ostatecznie mamy metodę część, która
przyjmuje string jako parametr, a następnie nie zwraca nam żadnej wartości,
czy też będąc bardziej konkretnym zwraca wartość undefined.
No to teraz musimy wykorzystać utworzone typy przekazując je w następujący sposób.
Przede wszystkim do genetyka przekazujemy
owszem value, aby upewnić się, że mamy tutaj do czynienia ze wynikiem.
Następnie, jeżeli chodzi o propsy,
przekazujemy tutaj interfejs, który określiliśmy w tym miejscu.
No i ostatecznie mamy jeszcze błąd dotyczący samego zdarzenia.
Jak wiemy, mamy tutaj do czynienia ze zdarzeniem związanym z formularzem Wy.
Zatem odwołujemy się do oby jak form event, a następnie do genetyka.
Przekazujemy element, z którym pracujemy i
w tym przypadku będzie to element typu SELECT.
Zatem odwołujemy się do klasy HTML select element.
Jeżeli chodzi o obsługę zdarzeń na razie się tym nie przejmuj, ponieważ o tym
będziemy mówić w jednej z kolejnych lekcji.
W każdym razie jesteśmy teraz w punkcie, w którym wszystko nam się tutaj zgadza i
nawet będziemy mogli wykorzystać tutaj nasz formularze.
W tym momencie, jeżeli przykładowo
zmienimy tutaj wartość któregoś z elementów na typ np.
number, to okaże się, że mamy tutaj błąd,
ponieważ przekazaliśmy tutaj typ, który nie jest dozwolony.
Natomiast sytuacja tutaj wygląda tak, że chciałbym utworzyć tutaj komponent
generyczny i generyczny na tyle, aby przyjmował nie tylko opcje zawierające
ciągi znaków jako klucze, ale również liczbę.
Czyli zmienimy teraz zestaw naszych danych
na taki, który będzie posiadał liczby jako klucze.
No i oczywiście mamy tutaj błąd.
Natomiast rozwiązaniem tego problemu nie
będzie tutaj zamiana typu string na number, ale upewnienie się, że nasz
komponent może przyjmować zarówno jeden, jak i drugi typ danych.
Tutaj sytuacja się nieco komplikuje, bo przykładowo w tym miejscu będziemy musieli
wykorzystać typ generyczny, który możemy przekazać w tym miejscu i musimy się tylko
upewnić, że będzie on ograniczony do typu określonego obszar.
Zatem mamy tutaj możliwość przekazania albo ciągu znaków lub ewentualnie liczbę.
Idąc dalej mamy błąd poniżej, ponieważ wykorzystujemy tutaj ten.
Interfejs, natomiast nie przekazujemy typu do genetyka.
Z tego powodu znowu tutaj musimy przekazać nasz typ.
No i tak samo tutaj musimy zastosować analogiczną opcję.
No i w tym momencie dochodzimy do punktu, w której wykorzystujemy tutaj gierek do
tego, aby móc przekazać go do naszych psów.
I w tym momencie ostatnią jeszcze rzeczą, którą musimy tutaj zrobić jest zamiana na
typ generyczny dokładnie tych typów String.
I w tym momencie wszystkie błędy, które mieliśmy tutaj zniknęły.
I mało tego, nawet jeżeli podmienię teraz
zestaw tych danych, to dalej wszystko będzie tutaj absolutnie w porządku.
Zatem jak widzisz, wykorzystaliśmy tutaj
nieco bardziej zaawansowane wykorzystanie typów, ale w dalszym ciągu opieraliśmy się
praktycznie wyłącznie o wiedzę pochodzącą z poprzednich lekcji.
Może za wyjątkiem obsługi zdarzeń.
Zatem tak jak widzisz, wykorzystanie page
skryptów reakcję nie stanowi jakiegoś większego problemu.
O ile rozumiemy te najbardziej podstawowe
zasady dotyczące typowania procesów oraz komponentów.
Nie oznacza to jednak, że kończymy w tym
miejscu, ponieważ zapraszam Cię do kolejnej lekcji.