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 jak pracować z
Context API wykorzystując Hook Context oraz oczywiście Tabs PID.
W pierwszej kolejności będziemy chcieli
utworzyć sobie nowy kontekst, który w tym przypadku będzie przechowywał informacje
na temat aktywnego motywu naszej aplikacji.
I na początku zainicjowali zmieniamy go wartością NULL, ale oczywiście będzie nam
tutaj zależało na tym, aby przełączać się pomiędzy wartościami Dark oraz Slide.
Zatem tworzę teraz nowy alias typu, który wykorzystamy do tego, aby utworzyć
interfejs naszego kontekstu zawierający dwie właściwości, czyli informacje na
temat aktywnego motywu oraz funkcję, która będzie umożliwiała nam zmianę tego motywu.
No i tutaj pojawiają się pierwsze schody,
ponieważ jeżeli przekażemy interfejs do kontekstu, to nagle okazuje się, że nie
obsługujemy tutaj wartości null, co jest oczywiście prawdą.
W związku z tym możemy wykorzystać unie
typów i wszystko jest w porządku tak długo, o ile pamiętamy o tym, aby za
każdym razem sprawdzać, czy nasz kontekst nie jest duchem.
Jest to trochę niewygodne i z tego powodu
możemy zrezygnować z tego zapisu i na przykład skorzystać z możliwości
ustawienia pustego obiektu zawierającego domyślne właściwości.
W niektórych przypadkach, gdy
przechowujemy jakieś proste dane, może nam się to całkiem sprawdzić, ale zdecydowanie
lepszym sposobem jest utworzenie własnego hooka.
Zatem zrobimy teraz tak, że wrócimy tutaj do wartości domyślnej NULL,
a następnie skorzystamy z niej, aby wszystko tutaj działało poprawnie i
utworzymy sobie nowy hook, który będzie nam sprawdzał, czy kontekst został już
ustawiony, a w przeciwnym razie będzie zwracał błąd.
Zatem poniżej definiujemy nową funkcję,
która będzie wykorzystywać kontekst, do której przekazujemy nasz kontekst.
Dzięki temu uzyskujemy dostęp do naszego
kontekstu i sprawdzamy po prostu, czy właściwość TIM została tutaj ustawiona.
Jeżeli nie, to wyrzucany jest błąd, a w przeciwnym razie ustawiamy nasz kontekst.
Zatem teraz, za każdym razem, gdy będziemy sięgać po nasz kontekst, od razu będziemy
mieć tutaj weryfikację, czy rzeczywiście jest on dostępny i czy został ustawiony.
Zaimportowania teraz jeszcze tego hooka.
No i możemy teraz utworzyć nasz provider.
No to tworzymy nasz nowy komponent funkcyjne, do którego będziemy
przekazywać, czyli które będziemy opracowywać z naszym
kontekstem, a konkretnie providera kontekstu.
I teraz to właśnie na tym etapie będziemy ustawiać nasz stan początkowo na wartości
slide, ale oczywiście jeszcze do genetyka musimy przekazać typ naszego kontekstu.
Następnie skorzystamy jeszcze z Chucka juz
do tego, aby upewnić się, że nie będzie tutaj jakiś element.
No i tutaj jeszcze oczywiście potrzebne są
zależności jeżeli chodzi o wartość tego providera.
Wykorzystamy tutaj bieżącą wartość naszego
kontekstu, a następnie wygenerujemy props children.
No i teraz jedyne o co muszę zadbać to o
zaimportowaniu tych poszczególnych łuków oraz typu komponentu funkcyjnego.
Dzięki temu otrzymujemy tutaj to niejawne
typowanie, o którym mówiłem wcześniej, aczkolwiek nic nie stoi na przeszkodzie,
abyśmy dodali tutaj konkretny typ, jaki Was tylko interesuje.
No to teraz kolejnym krokiem będzie utworzenie jeszcze jednego komponentu,
który będzie wykorzystywał ten nasz utworzony kontekst.
Zatem będzie to jakiś losowy komponent,
wewnątrz którego wykorzystamy nasz dający nam dostęp do kontekstu, który już
w tym momencie będzie posiadał początkową wartość.
Następnie tutaj wygenerujemy sobie kawałek
kodu HTML, wewnątrz którego wyświetlimy sobie aktualnie włączony tryb naszej
aplikacji oraz przycisk do tego, aby go zmienić.
Jeżeli chodzi o sam przycisk, będziemy
tutaj reagować na kliknięcie i wywoływać metodę Settings, do której przekażemy z
kolei odwróconą wartość z naszego aktualnego trybu.
Zatem efekt końcowy będzie taki, że ta
wartość będzie nam się zmieniać za każdym razem, gdy klikniemy w ten przycisk.
Dobrze byłoby zrobić jeszcze tak, aby styl
tego komponentu zmieniał się w zależności od aktualnego trybu.
Zatem zrobimy teraz proste przypisanie
stylów, w ramach których ustawimy podstawowe wartości CSS, no i oczywiście
takie, które będą zmieniać swoją wartość w zależności od aktywnego motywu.
No to teraz ten nasz komponent wykorzystujący Context jest już gotowy.
Tę ostatnią, co musimy zadbać, to po
prostu o to, aby wyświetlić go w ramach naszej aplikacji.
I teraz, aby to zrobić, musimy w pierwszej
kolejności zadbać o to, aby wykorzystać nasz think provider, a następnie wewnątrz
niego wyświetlić komponent, który będzie miał dostęp do dostarczanego kontekstu.
Jeżeli mielibyśmy tą aplikację, mielibyśmy możliwość przełączania się pomiędzy
motywami, które modyfikował zarówno kolor tła jaki kolor tekstu.
Ale pomijając to, to na co warto zwrócić uwagę, to przede wszystkim na ten problem
dotyczący domyślnej wartości naszego kontekstu.
W tym przypadku mówiliśmy o null
i w tym przypadku mamy i w tym przypadku mamy do czynienia z duchem.
Zatem pamiętaj proszę o tym, że dość dobrym sposobem jest albo ustawienie
domyślnych wartości bezpośrednio tutaj, albo ewentualnie dodanie pustego obiektu i
wykorzystanie asercji typu do tego, żeby trochę oszukać tutaj swój p.
Mówiąc poza tym, że mamy tutaj do czynienia z obiektem danego typu,
choć jak widzimy w rzeczywistości nie do końca tak jest.
Zatem moim zdaniem dobrym sposobem jest po prostu ustawienie tutaj wartości.
Tutaj wykorzystanie Union Type, a następnie utworzenie własnego kółka.
Kto będzie wykorzystywał ten kontekst?
I oczywiście samego providera, wewnątrz
którego będziemy ustawiać jego domyślną wartość?
W momencie, gdy będziemy o tym wszystkim
pamiętać, wykorzystanie obiektu ze Context API jest w zasadzie czystą formalnością.
Zatem dziękuję Ci teraz za uwagę i zapraszam Cię do kolejnej lekcji.