od Podstaw
4 godz. 55 min · ReactJS · Full-stack i Programowanie
Adam RomanskiFrontend developer & YouTube CreatorWszystkie tresci podzielilem na piec rozdzialów, w których bedziemy rozwijac wymyslona przeze mnie aplikacje sluzaca do kolekcjonowania najciekawszych artykulów, notatek oraz kont twitterowych znalezionych w sieci.
Zaczniemy od prostych widoków, na podstawie których wyjasnie Ci, co stoi u podstaw Reacta – dowiesz sie czym jest JSX, oraz poznasz pojecie komponentu funkcyjnego. Dzieki temu oswoisz sie ze skladnia Reacta, która poczatkowo moze wydawac sie nieco obca.
W React niemal wszystko opiera sie o komponenty. Czym one sa? Dowiesz sie tego w drugim rozdziale. Opowiem Ci jak je tworzyc oraz jak tworzyc relacje miedzy nimi. Wyjasnie Ci bardzo szczególowo jak dzialaja propsy oraz w jakich sytuacjach nalezy je wykorzystywac. Zobaczysz tez, jak w Reactcie pracujemy z danymi, jak mozemy je przetwarzac a nastepnie stosujac kilka strategii stylowania komponentów, wszystko wyswietlic w atrakcyjny sposób.
W trzecim rozdziale poznasz sposób konstruowania komponentów klasowych, posiadajacych wlasny stan, dzieki któremu stworzysz miedzy innymi dynamiczny, inteligentny formularz, a takze wiele innych interaktywnych elementów. Dzieki temu szybko zrozumiesz róznice miedzy komponentami funkcyjnymi a klasowymi.
Kiedy juz poczujesz sie dosc pewnie budujac komponenty, dodamy tzw. routing w rozdziale czwartym, który pozwoli nam na stworzenie wielu podstron, które urozmaica nasza aplikacje – dowiesz sie dzieki temu jak integrowac dodatkowe narzedzie w naszym projekcie, oraz jak budowac bardziej skomplikowana strukture aplikacji.
Na sam koniec zostaimy sobie tzw. state managment, czyli zarzadzanie informacjami wspóldzielonymi przez wiele komponentów i podstron. Nie wykorzystamy jednak ani Reduxa ani Mobxa, poniewaz chce Ci pokazac, ze w samym Reactcie kryje sie ogromny potencjal nawet przy tak kompleksowych zadaniach. W tym przypadku uzyjemy Context API, który w latwy sposób pozwala nam teleportowac dane z jednego miejsca naszej aplikacji do drugiego. Podczas rozbudowywania naszej aplikacji o Context API dopracujemy tez wszystkie inne jej elementy, aby na samym koncu kursu wydeployowac nasz gotowy produkt w serwisie Netlify – zobaczysz, ze wypuszczenie aplikacji Reactowej do sieci i udostepnienie jej innym, jest niezwykle proste.W tym kursie skupiamy sie wylacznie na Reactcie z uzyciem jedynie niezbednych narzedzi. Wierze, ze doskonale opanowanie fundamentów, na których opiera sie ta technologia pozwoli Ci pózniej latwiej wkroczyc w swiat setek pluginów i paczek dostepnych w jego ekoystemie.
Ten kurs powstal z mysla o osobach chcacych zaczac swoja przygode z frameworkami JavaSript. Zaklada on wiedze na temat podstaw JavaScript (w tym ES6), jednak przy bardziej skomplikowanych rozwiazaniach zawsze pojawia sie slowo wyjasnienia. \n\nPoziom kursu zostal dopasowany do osób, które maja za soba juz kilka projektów w czystym JavaScript i chca wejsc na wyzszy poziom, przygotowujac sie tym samym do pracy z ta technologia.
Cześć! Przed nami ostatnia lekcja związana z naszym formularzem. Potem
przejdziemy do innych zagadnień w następnym rozdziale, ale zanim to
zrobimy, to podsumujmy to, co zrobiliśmy w tym rozdziale i jeszcze rzućmy okiem na
nasz formularz i dokonajmy ostatnich tutaj zmian. Przede wszystkim
pewnie widzisz, że ostylowałem nasze radio button'y i celowo nie pokazałem,
jak to zrobić, ponieważ to dzięki własnym próbami i dzięki własnym staraniem najszybciej
nauczysz się React'a, więc jeśli Twoje radio button'y jeszcze nie wyglądają tak, jak te,
to podpowiadam, że warto teraz zatrzymać te lekcje i zrobić
to samodzielnie. Ja tylko podpowiem, że wykonałem
tutaj osobny komponent, który nazywa radio i do niego podaje pewne
props'y. Jeśli chcesz, spróbuj wykonać ten komponent samodzielnie. Jak
widzisz, nie chodziło tu wyłącznie ostylowanie, ale przekazanie pewnych props'ów do
tego komponentu i tak dalej. Jeśli natomiast twoje buttony wyglądają
tak, jak tutaj. Są zgodne design'em i działają poprawnie, to mmożemy zacząć
naszą pracę. Tylko pokażę ci, jak wyglądało moje podejście do stworzenia tego
komponentu, ale pamiętaj, że React daje ogromną swobodę, jeśli
chodzi o tworzenie aplikacji i często nie ma tutaj jednej, słusznej drogi. To,
że mój komponent wygląda w ten sposób, nie znaczy, że twój nie będzie lepszy
od mojego. Popatrzmy zatem, co kryje się w naszym komponencie radio. Jest
to komponent prywatny komponentu form, więc znajduje się tym samym folderze i
jego nazwa pliku to FormRadio. Z niego eksportujemy sobie consta radio, chociaż
jest to export default, więc pamiętaj,że ta nazwa, nie jest dla zobowiązująca,
ale trzymamy się właśnie tej nazwy. To taki szczegół. Wewnątrz
naszego radio destrukturyzujemy sobie props'y, które są podawane przez rodzica
i tutaj zatrzymamy się na chwilę przy dwóch props'ach - changeFn to
jest funkcja, którą podajemy do eventu onChange, ponieważ teraz, to właśnie ten
komponent tutaj generyczny input, jest odpowiedzialny za tę funkcję, a nie
ten zewnętrzny radio, tym miejscu. Tutaj podajemy tylko props'a. Jest
to changeFn. Drugim props'em jest, oczywiście, children, ponieważ wszystko
jest oplecione w label i w tym momencie children będzie, po prostu, tekstem, który wrzucamy
między tagi naszego komponentu, czyli na przykład Twitter, Article albo nawetNote
i z racji, że jest to oplecione w label, to nawet jak klikniemy na tekst, to nasz
radio button się zaznacza. Ale wróćmy jeszcze na chwilę do tego komponentu i spójrzmy,
że mamy tutaj div'a, który nazywa się radio button i to
on właśnie odpowiedzialny jest za to kółko, ponieważ nasz input jest ukryty i
tak to zazwyczaj działa, że jeśli chcemy ostylować sobie jakoś, po
swojemu, radio button'y, to ukrywamy ten generyczny input i zamiast niego, stawiamy
coś innego. Ale przejdźmy teraz do stylów, bo tam się dzieją właśnie dużo ciekawsze rzeczy. Przede
wszystkim nasz radio ma właściwość inline-flex, czyli, z jednej strony,
wyświetla się na jednej linii, ale z drugiej możemy stosować align-items: center. Przez
co, nasze kółko jest zrównane idealnie na osi y z naszym
napisem. Dodatkowo input, jako taki, został schowany, ponieważ zawsze
kiedy stylujemy radio button'y - chcemy schować domyślny
input i stworzyć własny i tutaj właśnie wkracza nasz radio
button, który znajduje się w tym miejscu. On ma 15 pikseli szerokości
i wysokości. Jest oczywiście okrągły, a dodatkowo w momencie
kiedy input jest zaznaczony, a input jak widzisz, wie
o tym, ponieważ przekazujemy mu props'a checked. W CSS'ie natomiast
możemy sprawdzać, czy input jest zaznaczony i jeśli jest, to ten button,
który jest sibling'iem, jest rodzeństwem tego input'a - może
dostać jakieś dodatkowe style i przez to dostaję background-color
i box-shadow na inset'ie z zerowym blur'em i z
takim właśnie wniknięciem do środka, na 2 piksele. Przez
co nasz radio button wygląda w ten sposób. I tylko
jeszcze rzut oka z góry, na finalny komponent.
Jak widzisz, podajemy tutaj tak jak wcześniej, jako id - types
i odpowiedni typ, dla każdego radio button'a. Checked oczywiście
sprawdzamy w taki sam sposób, jak wcześniej. Tutaj, zamiast onChange -
wprowadzamy props'a changeFn, ponieważ sama onChange musi się wydarzyć
w tym miejscu i tutaj podajemy tego props'a - changeFn. Okej, skoro
to już mamy wyjaśnione, to nie pozostaje nam nic innego, jak dopasowanie naszych inputów,
tutaj na dole. Do tego, jaki typ notatki będziemy dodawać w naszej aplikacji i
tak naprawdę zmienią się tutaj trzy rzeczy. Pierwsza
jest taka, że jeśli to nie będzie Twitter, to nie będziemy
dodawać obrazka. Druga jest taka, że jeśli to nie będzie Twitter,
to nasz label nie będzie nazywać się Twitter link, tylko po prostu link
i będzie się wyświetlać tylko w momencie, kiedy będziemy mieć artykuł, bo
jeśli będziemy mieć notatkę, to żadnego linka nie będziemy dodawać. A trzecia
jest taka, że jeśli to nie będzie Twitter, to zamiast name, damy title. Więc,
zacznijmy od najprostszych rzeczy. Będziemy usuwać
obrazek, jeśli nie będzie to Twitter, więc
this.state... Jeśli aktywną
opcją jest Twitter, wtedy
renderujemy input dla naszego obrazka. Jeśli nie, to
renderujemy nic. Sprawdźmy, czy to działa - działa. I
tutaj pojawiła się nowa rzecz, którą pewnie warto wyjaśnić. W takim
renderowaniu warunkowym, kiedy chcemy zwrócić coś albo nic, to pamiętaj,
że w momencie, kiedy chcemy zwrócić nic - możemy wrzucić po prostu nula. Pamiętaj,
że jest zwykła funkcja w JavaScript'cie i jeśli coś chcemy z
niej zwrócić, to możemy to oczywiście zadeklarować. Natomiast, jeśli chcemy z nich zwrócić
absolutnie nic, to najlepiej właśnie, aby był to null. Będziemy mieć tu
sporo porównywania do activeOption, więc już teraz zdestrukturyzujemy go sobie w
tym miejscu. Teraz podmienimy
każde this.state.activeOption, na po prostu, activeOption. Nasz
modal działa. Nic się nie zepsuło. Okej, możemy działać dalej. Renderowanie
warunkowe mamy już ogarnięte. Teraz będziemy zmieniać label do naszego name. Jeśli activeOption
jest równe Twitter'owi
i wtedy
niech to się nazywa Twitter Name. Jeśli
natomiast to nie będzie Twitter, to niech to będzie zwykłe Title. Mamy
Twitter Name, a jak zmienimy, to mamy Title - świetnie. I
jeszcze ostatnia rzecz, zresztą bardzo podobna do tej. Możemy
to skopiować tutaj,
tylko podmienimy na Twitter link. A jeśli to nie będzie
Twitter, to niech to będzie link. Tutaj
dodatkowo musimy jeszcze zrobić renderowanie warunkowe, bo tak jak
mówiłem w notatkach, nie będzie linków activeOption. Zróbmy,
że jeśli to nie będzie notatka, to
wtedy ma się pojawić, a jeśli to będzie notatka, to ma zwrócić null'a. Chwila
prawdy, super,
nasz model działa jak należy. Nasz form elegancko
zmienia wszystkie opcje tak, jak chcieliśmy. Kawał
dobrej roboty za nami. Stworzyliśmy dość zaawansowany model, z fajnym
dynamicznym formularzem. Stworzyliśmy routing, który działa bez
zarzutu w naszej aplikacji, więc teraz czas, żeby przejść
do następnego działu tego kursu, gdzie opowiem Context API. Do
zobaczenia!