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ść! W tej lekcji dokończymy stylowanie naszego komponentu. Zrobimy tak, żeby on
wyglądał w końcu odpowiednio, żeby był bardzo podobny do tego, co mamy w tym miejscu - zarówno
jeśli chodzi o ten pojedynczy komponent, jak i o całą naszą listę - a następnie zaimportujemy
sobie w końcu odpowiednie dane, dzięki którym wyświetlimy całą naszą listę. Nadamy teraz
naszemu komponentowi mały padding. Od góry niech to będzie 50.
Po bokach niech to będzie 30. Nasz
obrazek niech ma flex-shrink 0, żeby nie kurczył się pod tym naszym fleksem. I margin z
prawej strony - nadamy mu 50 pikseli. Może trochę
za dużo - 30. Okej. Teraz wróćmy sobie na chwilę do
naszego ListWrapper i stwórzmy odpowiedni plik ListWrapper.css. Zaimportujemy go do
naszego komponentu. Nadamy
odpowiednią klasę naszemu wrapperowi ListWrapper
i teraz stworzymy dla niego szerokość o
maksymalnej szerokości 80 viewport width i sprawimy, żeby on
był na środku naszego ekranu. I pewnie jeszcze
dodam trochę originu z góry. Na dole
niech do będzie 0. Okej. Nasz komponent zachowuje się całkiem
fajnie. Musimy jeszcze mu nadać tylko
margin-bottom, żeby
mógł odpychać te elementy, które znajdą się bezpośrednio pod nim. Ostatnią
kosmetyczną zmianą będzie jeszcze zmniejszenie tutaj marginu między description a name.
Idealnie. I teraz jeśli sobie wyrenderujemy ten komponent
kilka razy, to zobaczymy, jak on będzie się zachowywał jeden pod
drugim. Świetnie. Ta odległość między poszczególnymi komponentami może być trochę
za duża, więc ją zmniejszymy. I w tej
chwili nasz komponent jest ostylowany w taki sposób, że możemy przejść do pracy. Możemy w
końcu zaimportować dane, dzięki którym wyświetlimy wszystkie odpowiednie postacie w
naszej liście, a nie czterech Danów Abramowów, no bo to żadna frajda
przecież. Wiec teraz wrócimy do naszego ListWrapper i opowiem Ci, jak to wszystko się
wydarzy. Przede wszystkim usuńmy sobie na razie te cztery komponenty. I naszym
celem jest zaimportowanie tego, co mamy w folderze data, a następnie wyświetlenie tego w
sposób automatyczny w naszym komponencie. I możemy to zrobić przy pomocy propsów,
o których Już na początku tego kursu trochę powiedziałem. Za chwilkę rozszerzymy sobie to pojęcie, ale pierwsze, co
zrobimy, to zaimportujemy nasze dane. Okej. Mamy Już zaimportowane dane do naszego
pliku. Teraz to, co chcielibyśmy robić, to po prostu wybierać sobie twitterAccounts. Na
przykład pierwszy element z naszej listy - name. Jeśli
sobie to wylogujemy, to
zobaczymy, że mamy Dana Abramowa, wszystko się zgadza. I
chcielibyśmy to imię podać do naszego komponentu tak, żeby to
zostało wyświetlone zamiast tej sztywnej nazwy tutaj. I możemy to
zrobić za pomocą propsów. Jeśli pamiętasz, jak działa JSX, czyli, że jest to
tak naprawdę cukier syntaktyczny na metodę react client element, to
pamiętasz, że propsy są dodatkowymi parametrami do naszej funkcji. Zresztą
Już w tym komponencie, który teraz widzisz mamy dodane propsy w postaci className. Przecież nie jest to ta
zwykła klasach HTML-owa, tylko jest to props reactowy, który
odpowiada za nadanie klasy. I zapis każdego innego propsa
w React wygląda dokładnie tak samo. Czyli nadajemy mu jakieś imię, jakąś
nazwę, a następnie podajemy wartość, którą chcemy mu przekazać. Więc
w tym wypadku chcielibyśmy na przykład żeby nasz komponent przyjmował propsa
name. I to, co możemy tutaj
zrobić, to wybrać sobie ten element z naszej tablicy twitterAccounts,
dokladnie z pierwszego elementu wybieramy klucz name. Teraz
Jeśli wrócimy sobie do ListItem i zadeklarujemy mu, że on
będzie przyjmował jakieś propsy, uprzedzimy go o tym , to w tej
chwili, jeśli zamienimy Dan Abramov na props.name, to
dostaniemy dokładnie to samo. I to jest
taki pierwszy magiczny moment w tym kursie, gdzie zobacz,
co możemy zrobić. Możemy zmienić nazwę naszego
Dana Abramowa. Czyli podsumowując: tworzymy nową nazwę propsa. On może być
dowolnie nazwany. Może to być na przykład firstName.
Teraz jak przyjdziemy sobie tutaj, to on też musi się
nazywać firstName, więc nazwa zależy
od nas. Następnie podajemy mu jakiś parametr, jakąś
wartość, którą ma wykorzystać ten props. Wróćmy tutaj
do name. Więc teraz naszym celem jest zastąpienie każdej
sztywnej wartości w naszym komponencie dynamicznymi wartościami
zaimportowanymi w rodzicu tego komponentu, czyli w ListWrapper. Oprócz
oczywiście tego tutaj tekstu na buttonie, bo on w każdym komponencie
wygląda dokładnie tak samo. Więc teraz wracamy sobie na chwilę do ListWraper
i podamy każdego propsa. Wszystko się
udało. Wszystko działa. Propsy zostały podane odpowiednio. Zauważ, że nie
musimy wykorzystywać tych propsów tylko i wyłącznie w takim miejscu, bo możemy je również
podać jako src. Tak naprawdę możemy je używać gdziekolwiek, ponieważ jest to po prostu
JavaScript , a to nie jest HTML, wiec wszystko tutaj jest możliwe. Nawet możemy
zrobić coś takiego, że jeśli nie mielibyśmy tego name, to możemy podać cokolwiek
innego. I teraz jeśli tutaj usunę tego propsa, to
pojawi nam się Roman. Wynika to z tego, że mamy tutaj proste działanie logiczne. Jeśli
nie ma podanego propsa name, to mamy zmienić na stringa "Roman". W React robi się to
Jeszcze trochę inaczej, poprzez użycie rodzaje PropTypes, ale do tego
przejdziemy w dalszej części tego kursu. Na razie wrócimy sobie do tego, co mieliśmy
przed chwilą. I wszystko wygląda całkiem fajnie, tylko że łamiemy
tutaj jedna zasadę. Jeśli chcielibyśmy wykorzystać wszystkie elementy z naszej
tablicy, to musielibyśmy zrobić coś takiego. I faktycznie
wszystkie komponenty renderują się świetnie, wygląda to prawie tak
samo jak w sketchu. Jest tylko jeden problem. Łamiemy tutaj zasadę
DRY, czyli don't repeat yourself. Ale jest na to świetna metoda i
pokażę Ci to w następnej lekcji, co Jeszcze bardziej dobitnie
udowodni, że JSX to nie jest HTML, tylko czysty
JavaScript. Do zobaczenia w następnej lekcji.