Projekt aplikacji SaaS
8 godz. 8 min · Next.js · Full-stack i Programowanie
Daniel NoworytaFull stack DeveloperNaucz się tworzyć bezpieczne systemy uwierzytelniania i autoryzacji, korzystając z Clerk. Pokażę Ci, jak to robić krok po kroku, aby Twoje aplikacje były bezpieczne i profesjonalne.
Zrozumiesz, jak skutecznie i bezboleśnie połączyć swoją aplikację Next.js z bazą danych PostgreSQL na DigitalOcean. Pokażę Ci, jak używać Prismy, aby ułatwić ten proces.
Dowiesz się, jak zarządzać routingiem i nawigacją w swojej aplikacji, aby użytkownicy mogli łatwo i intuicyjnie poruszać się po Twojej stronie.
Pokażę Ci, jak z łatwością wdrożyć swoją aplikację na Vercel, jednym z najpopularniejszych środowisk hostingowych dla aplikacji Next.js.
Nauczysz się zarządzać stanem aplikacji i jak wykorzystać server actions w praktyce, co pozwoli Ci na tworzenie bardziej zaawansowanych i dynamicznych funkcji.
Ten kurs jest dla osób, które już mają pewne doświadczenie z JavaScript i chcą zgłębić swoje zrozumienie Next.js. Zakładamy, że znasz podstawy TypeScript, TailwindCSS, ale nie potrzebujesz doświadczenia z Next.js - wszystko wyjaśnię Ci od podstaw!
Zaczniemy sobie teraz budowanie tutaj tego
elementu, który widzimy na samym dole naszej sekcji.
Jeżeli chodzi o usera, mianowicie
tego guzika tutaj z avatarem, który będzie pobierany z konta naszego użytkownika, z
konta z Claire, a tu będzie username, który też możemy sobie pobierać z konta.
I tutaj mamy mur beton.
Póki co zrobimy sobie taką funkcjonalność,
że po kliknięciu tego guzika będziemy mieli popa, który wyskakuje i
zrobimy opcję po prostu wylogowania się danemu użytkownikowi.
Dlatego teraz przejdziemy do naszego kodu.
Jeszcze jedna ważna uwaga.
Tak naprawdę to tutaj możemy traktować
jako jedną wielką całość, bo to zawsze musi być odsunięte jakby na sam dół.
Dlatego możemy sobie teraz to zapakować w jednego diva.
Przejdźmy do naszego naszego edytora kodu.
Tutaj jest nasza aplikacja.
Tutaj mamy status poprzedniej części tej lekcji.
Jeżeli chodzi o to, to
ten diff sobie zostawimy, natomiast to tutaj pójdziemy w jednego diva to będzie
nasz wrapper na button do nowej subskrypcji.
Zapiszemy to sobie teraz i tutaj zrobimy sobie drugi wrapper na to co teraz
będziemy potrzebować i na pewno co tutaj będzie potrzebne.
Otóż potrzebujemy.
Z tego co widać na designie to to jest oddzielone jakimś divide rem i jest to
jakiś padding pomiędzy tymi dwoma elementami.
Zróbmy sobie teraz ten divide divide.
Możemy sobie nałożyć tutaj na ten główny
wrapper i możemy sobie powiedzieć tak, że chcemy mieć gap równy 4.
I w tym momencie Divide y niech będzie na póki co na 2.
Zróbmy sobie jeden pixel, żeby ten divide miał bardzo małą szerokość,
wysokość i kolor divide ying i ustawmy sobie kolor na 300.
Zapiszemy to sobie.
Przejdźmy do naszej przeglądarki.
Póki co nic nie widzimy, bo nie mamy następnego elementu.
Natomiast jeżeli teraz sobie tutaj
wstawimy pierwszy z elementów, które potrzebujemy.
Zobaczmy co potrzebujemy.
Potrzebujemy jakiś obrazek, potrzebujemy tekst, no i potrzebujemy ten mur button.
Przejdźmy do naszego edytora kodu.
I tutaj w tym momencie użyjemy sobie
komponentu Image, który jest dostarczony z Next Jamesem.
Importujemy nasz image, mamy import z Next Image.
Jeżeli chodzi o następną rzecz, to
potrzebujemy tutaj jakiś paragraf i tutaj będziemy potrzebowali jakiś
username i tego usera będziemy skądś potrzebowali sobie zaciągnąć.
Na chwilę obecną ja sobie wpiszę na sztywno, tutaj stanie nową rata.
No i ostatnia rzecz, która tutaj będzie jakiś button
jeżeli chodzi o ikonkę w tym button będzie jedna z ikon
z naszej paczki remix icons Class name i nazwa tej ikonki to jest R i minus No
2 fill zapiszemy to już nam się pojawiły ikony, już się pojawił Divided.
No na razie obrazka tutaj nie mamy, bo nie mamy jakby tego obrazka.
Czyli pojawiają się tutaj dwa problemy.
Potrzebujemy tak naprawdę nazwy
użytkownika i potrzebujemy tak naprawdę adres do obrazka użytkownika do avatara.
Z tego co widzieliśmy, jak byliśmy tutaj
po stronie głównej, no to tak naprawdę awatar mamy tutaj ustawiony przez naszego
użytkownika w ustawieniach jego konta, dlatego możemy skorzystać z tej opcji.
Jeżeli chodzi o Clark, to Clark dostarcza
profil Image URL, natomiast najpierw musimy sobie jakoś pobrać użytkownika.
I teraz, żeby pobrać tego użytkownika musimy skorzystać z jednego z gotowych
hubów, które dostarczone są przez paczkę właśnie Clark.
To będzie Connect User równa się + User
i to jest hub, który jest dostarczony właśnie przez Clarka.
Natomiast będziemy mieli jeszcze jeden problem.
Jeżeli przejdziemy teraz zapiszemy tą akcję.
Ja sobie może za komentuje tutaj to wszystko.
Na chwilę obecną przejdziemy sobie do Dashboard.
Sprawdźmy co tutaj się dzieje.
A empty to user from the server user is on the client.
Czyli musielibyśmy.
Żeby skorzystać z tego hooka musielibyśmy
tutaj cały nasz layout przerobić na komponent klienckie, czego generalnie nie
chcemy, bo nasza nawigacja tak naprawdę może być komponentem po stronie serwera.
Tylko te linki tutaj wymagamy, żeby były po stronie klienta, bo
to są rzeczy, które wchodzą w interakcję z naszym użytkownikiem.
Tak samo jeżeli chodzi o tą część.
Tą część możemy sobie wyodrębnić
i tak naprawdę możemy wyodrębnić również wraz z tą częścią ten new
description, dlatego, że w późniejszej części tego kursu pokażę Ci
jak zbudować funkcjonalność dodawania nowych subskrypcji.
Dlatego ten guzik też będzie musiał być tak naprawdę po stronie klienta.
Będziemy tutaj wchodzić w interakcje.
Będziemy sobie otwierać pokład, który
będzie musiał będzie przyjmował input użytkownika.
Dlatego teraz myślę warto jest odpowiedni
moment, żeby sobie wyodrębnić tutaj tą część jako osobny komponent.
Komponent po stronie klienta, czyli standardowy komponent, z którym mieliśmy
okazję pracować tak naprawdę do tej pory w reakcje.
No to przejdźmy do wyodrębnienia tego komponentu.
W naszym folderze komponent zrobimy sobie app i User button jest X.
Niech to będzie nasz nowy komponent po stronie klienta i tutaj
będziemy potrzebowali tak naprawdę zrobić Export Default App USA Button.
No i jako read możemy sobie spokojnie tutaj tak naprawdę
wkleić zawartość tego, co mamy tutaj w tym drzewie.
To będzie nasza część, którą będziemy tutaj chcieli zwracać.
Zapiszemy sobie ten plik.
No i musimy teraz użyć tego komponentu już
w miejscu, w którym chcielibyśmy wykorzystać nasz nasz komponent, prawda?
Czyli teraz Up User Patton.
Zapisujemy to sobie i w tym momencie już powinien zostać wygenerowany ten button.
Jeszcze nie rozwiązaliśmy problemu tutaj
komponentu po stronie klienta, bo cały czas odwołujemy się do tego hooka tutaj po
stronie serwera, co jest oczywiście błędem.
Dlatego przeniesiemy ten hokus user
do naszego komponentu komponentu po stronie klienta.
Użyjemy sobie tego hooka.
Oczywiście musimy go sobie teraz zaimportować.
Zapiszemy sobie to tu.
Ten hook tutaj możemy sobie usunąć.
Możemy sobie optimizer import zrobić,
żeby usunąć importy, które nie są nam potrzebne.
No i w tym momencie już zobaczmy co tutaj się dzieje.
Następne to call.
Jest już zresztą Reserved User, jest on the client.
Oczywiście musimy oznaczyć sobie ten nowo
powstałe komponent jako komponent po stronie klienta, czyli Just Client.
Zapisujemy to sobie.
No i już w tym momencie mamy pierwszą logikę.
Teraz możemy sobie już prawdopodobnie użyć
tutaj z tego usera pewne wartości, które się nam przydadzą.
Natomiast jedna rzecz,
która jest potrzebna to Myślę, że jeżeli usera nie ma to to chcemy zrobić
i Clark też tutaj daje komponent, który możemy użyć.
Mianowicie Clark Loading, czyli zróbmy sobie if teraz not user.
Zrobimy sobie i tutaj Clark Loading to jest gotowy komponent Sklejka.
Musimy go oczywiście teraz też zaimportować.
Zapisujemy to sobie. Teraz już jesteśmy pewni, że usera mamy w
tym miejscu, w naszym komponencie, w naszej funkcji.
Dlatego możemy komentować tutaj to wszystko.
No i tak pierwsza rzecz, którą sobie tu użyjemy to na pewno user
i tutaj możemy sobie użyć naszego username, które jest dostarczane.
Zobacz, mamy wszystko statystycznie jakoś
średnio typowane i już nam podpowiada co tutaj jest dostarczane.
No i username jest jak najbardziej jedną z
właściwości, która jest string w naszym przypadku.
Jeżeli chodzi o nas image no to musimy sobie zrobić kilka rzeczy.
Na pewno serce musimy sobie ustawić i w
tym momencie user co zobaczy mamy profil i mieć niech to będzie profil linii.
Jeżeli chodzi o style tego obrazka to jak najbardziej musimy sobie to ustawić.
Natomiast ciągle będziemy dostawać tutaj
error, że musimy mieć alt property ustalone.
Dlatego teraz robimy sobie alt równa się i tutaj możemy skorzystać z.
I otworzymy wartość.
Tutaj użyjemy User username i możemy dodać avatar jako opis tego obrazka.
Dodatkowo co my tu mamy to sprawdźmy jakie mamy znowu error class,
czyli sprawdźmy image czy oczywiście nie zainteresowaliśmy sobie email.
Do tego kopiujemy tą linie i importujemy.
Tutaj mamy już wszystko jest w porządku.
Natomiast zobacz mamy kolejny error i
miecz w serce jest missing required w w property.
No to zaczniemy sobie dodawać w zależności tego co nasz tutaj kompilator mówi.
Dlatego robimy sobie wf i zróbmy sobie wf tego obrazka na 40.
Ustalmy sobie od razu height, na 40 też
i class name musimy sobie ustawić, żeby ten obrazek był kółkiem, czyli skorzystamy
z gotowej klasy w naszym tagu CSS i tutaj w tym przypadku będzie from the fool.
Zapiszemy sobie to wszystko.
No i teraz dostajemy kolejny error tutaj od naszego frameworka.
Next Zobacz Invalid serce prop host images
is not configure Android next config Teraz.
Otóż jeżeli chodzi o obrazki, które chcesz używać w tutaj w tym
komponencie, no to musimy sobie skonfigurować naszą aplikację tak, żeby
była gotowa do tego, żeby tak naprawdę wywołać te obrazki z innych hostów.
W naszym przypadku chodzi o image dev.
Czyli tutaj musimy rozszerzyć naszą konfigurację o tak images, czyli images.
I tutaj otwieramy sobie tak naprawdę tablicę
i jeżeli chodzi o to, to przyjmuje to taką formę i tutaj możemy sobie ustalić
protokół, protokół i niech to będzie https.
Jeżeli chodzi o host name to musimy sobie skopiować images cleaner
i jeżeli chodzi o port to możemy to sobie zostawić tutaj jako puste.
Warto zapiszemy sobie tą konfigurację.
Zobaczmy czy nasza aplikacja została. Przebudowana.
Czy będziemy musieli sami to zrobić?
Oczywiście pod nimi.
To powinien być obiekt.
Tak naprawdę i my potrzebujemy remont patrząc klucz.
To są nasze ramy.
Teraz i w tym momencie zapiszemy naszą konfigurację i odświeżamy naszą stronę.
Zobaczmy, czy się wczyta, czy też będziemy musieli przebudować naszą aplikację.
Aplikacja już została przebudowana.
Zobacz mamy tutaj obrazek naszego użytkownika, który jest zacytowany
bezpośrednio z obiektu User, który dostajemy z naszego kółka.
Jeżeli chodzi o ten obiekt to ma on bardzo
dużo przydatnych rzeczy, które można sobie tutaj używać.
Jeżeli chodzi o email address mamy zestaw wszystkich maili.
Mamy. Mamy.
W zależności od tego jeżeli chodzi o sesję możemy sobie sprawdzić sesję, także jeżeli
będziesz chciał sobie budować tej aplikacji dodatkowo jakiś panel
zarządzania użytkownikami to bardzo w tym może Ci pomóc tak naprawdę.
Natomiast wróćmy tutaj do sterowania tego, bo jeszcze nie wygląda to tak, jak byśmy
chcieli do końca i czego nam brakuje, to tak naprawdę
brakuje nam tego, żeby te wszystkie rzeczy wyświetlały się tutaj w jednej linii.
Czyli class name zrobimy sobie Flex Items Center.
Zobaczmy tu już jak wygląda.
No już wygląda dużo lepiej.
Na pewno jeszcze przydałoby się jakieś pass y.
Czyli p x ustawimy sobie na cyferkę 4 i Y ustawimy na też 4 zapiszemy to.
No już to wygląda dużo lepiej, prawda?
Jeżeli chodzi o
nazwę użytkownika też przydałoby się to jakoś tutaj wystylizować, czyli własny.
No i tu będziemy potrzebowali odsunąć troszkę tą nazwę, czyli ML 2.
Odsuniemy ją od tego obrazka.
Zrobiła się nam fajna przerwa, zrobimy sobie tekst s m i font semi bold.
Wszystko już wygląda tak jak powinno.
Jeszcze jak tutaj jesteśmy to wróćmy do naszego layoutu i w naszym layoucie
ustawimy sobie inny font dla naszej aplikacji, żeby pokazać Ci, że możesz
sobie wykorzystywać tak naprawdę teraz te layouty.
Bo tak naprawdę marketing pages mogą mieć
swój font, a nasza aplikacja może mieć też swój font.
Także jeżeli przejdziemy tutaj do naszego
layoutu, to możemy sobie zmienić czcionkę dla całej naszej aplikacji.
I to sobie właśnie teraz zrobimy
i skorzystamy sobie z gotowych fontów, które dostarczają nam next.
Mianowicie możemy sobie zrobić const.
Wykorzystamy font inter.
Jest to bardzo popularny font Winter równa się interfejs.
Skorzystamy właśnie z gotowej paczki.
Next Font Google jest to dostarczany właśnie z frameworkiem Next.
No i tutaj możemy sobie ustawić opcję.
Jeżeli chodzi o sam set to ustawimy sobie
latin jeżeli chodzi o display, ustawimy sobie opcję swap.
No i teraz wykorzystamy sobie ten font
i tutaj jeżeli chodzi o klasę to mamy Flex i H.
No oczywiście musimy tutaj skorzystać
teraz prawdopodobnie z albo z interpolacji.
No czyli coś takiego skorzystamy z wartości.
I w środku.
Tutaj możemy sobie wykorzystać Winter Classic.
Zapiszemy sobie już font w całej naszej aplikacji się zmienią.
Także już mamy inny font.
Powinien to być Inter.
Teraz sprawdźmy w naszej aplikacji jakiego używamy konta.
No i mamy Inter, także to jest główny font całej naszej aplikacji.
Dobrze, myślę, że tutaj mamy wszystko.
Jeżeli chodzi o styl owanie naszego
layoutu w aplikacji, to sobie możemy zamknąć.
Natomiast pozostaje nam tutaj jeszcze jedna rzecz.
Otóż zbudowanie funkcjonalności do
wylogowania się użytkownikowi i teraz tym zajmiemy się w następnym module.