Front-end

Nadchodzi Next.js 13!

25 października została wydana 13 wersja popularnego frameworka do tworzenia aplikacji webowych Next.js, która wprowadziła szereg nowych funkcjonalności i usprawnień. Jeśli jesteś programistą pracującym z Next.js, koniecznie sprawdź, jakie nowe możliwości daje Ci ta wersja i jakie usprawnienia możesz zyskać dzięki niej.

11 cze 2022

Pod koniec października, a dokładnie 25 podczas konferencji została wydana 13 wersja Next JS. W tym artykule omówię najważniejsze zmiany. Uwaga, musimy mieć na uwadze to, że niektóre funkcjonalności dalej są w fazie beta, twórcy odradzają stosowania niektórych z nich na produkcji.

Zanim przejdę do omówienia nowych funkcjonalności chciałbym podzielić za pomocą listy funkcjonalności, które dalej znajdują się w fazie beta oraz te, które są już stabilne:

 

Funkcjonalności w fazie beta:

  • Nowa struktura /app
    - layouts
    - server components
    - streaming
  • @next/font
  • Turbopack

 

Funkcjonalności stabilne:

  • next/image
  • next/link

 

Co nowego?

W nowej wersji katalog pages został zastąpiony folderem app. Nowa struktura ułatwia nam korzystanie z layoutów, pozwala nam na tworzenie serwer komponentów, a także na stworzenie widoku ładowania kontentu, który będzie się wyświetlać w przypadku np. długiego czasu oczekiwania danych z serwera.

 

Zmiany w routingu:

W poprzedniej wersji to pliki definiowały routing, lecz w nowej strukturze to foldery definiują routing, a folder app odpowiada ścieżce /. Jeżeli chcemy utworzyć podstronę kontakt to należy utworzyć następującą strukturę: app > kontakt > page.tsx

// app/kontakt/page.tsx
export default function Page() {
 return <h1>Strona kontaktu</h1>;
}

Zmiany w layoucie:

W wersji nexta komponent odpowiadający za layout aplikacji tworzymy w folderze app i nazywamy go layout.tsx. Ponadto teraz jesteśmy w stanie tworzyć zagnieżdżone layouty w prostszy sposób. Jeżeli potrzebujemy, aby strona kontakt miała zagnieżdżony layout wystarczy, że w katalogu kontakt utworzymy plik layout.tsx i tam zdefiniujemy nasz layout.

// app/kontakt/layout.tsx
export default function ContactLayout({ children }) {
 return <section>{children}</section>;
}

 

Serwer komponent:

Dzięki komponentom renderowanych po stronie serwera zmniejsza się ilość kodu wysyłanego do klienta co umożliwia szybsze ładowanie strony. Ponadto teraz już nie musimy korzystać z getServerSideProps, ponieważ wszystkie komponenty domyślnie są renderowane po stronie serwera. Jeśli chcemy, aby nasz komponent renderował się po stronie klienta należy użyć składni “use client”.

Użytkownik, Next.js 13

@next/font - nowy system korzystania ze czcionek Google

Teraz czcionki i pliki css będą pobierane w czasie kompilacji z resztą zasobów statycznych, dzięki czemu przeglądarka nie będzie wysyłać żadnych zapytań do Google.

 

W nowej wersji nexta nie jest już wymagane przekazywanie taga html <a>.

 

@next/image - usprawnienie komponentu <Image>

Komponent <Image> jest teraz łatwiejszy w stylizowaniu, a także nie jest już wymagane podania właściwości fill, gdy nie chcemy ustalać wysokości oraz szerokości zdjęcia, a także tag alt nie jest już wymagany.

 

Turbopack

Next js dodał Turbopack, który jest następcą Webpacka, opartego na Rust.

Turbopack ma być 700x szybszy niż webpack, a także 10x szybszy niż Vite.

FAQ

Najczęstsze pytania

  • Next.js 13 miał premierę 25 października 2022 r. na konferencji Next.js Conf. To najważniejsza zmiana w historii tego frameworka: wprowadził katalog app z nowym systemem routingu, zagnieżdżonymi layoutami, komponentami serwerowymi i strumieniowaniem odpowiedzi, a obok tego system ładowania czcionek oraz eksperymentalny Turbopack. Część nowości była wtedy w fazie beta i twórcy odradzali używanie ich na produkcji — dziś katalog app jest zalecanym domyślnym sposobem budowania aplikacji, a starszy katalog pages pozostaje wspierany.
  • Katalog pages został zastąpiony folderem app. W poprzedniej wersji to pliki definiowały routing, w nowej strukturze definiują go foldery — folder app odpowiada ścieżce głównej. Aby utworzyć podstronę kontakt, należy utworzyć strukturę app > kontakt > page.tsx. Layout aplikacji tworzy się w pliku layout.tsx w folderze app, a zagnieżdżone layouty definiuje się przez dodanie pliku layout.tsx w odpowiednim podkatalogu.
  • Dzięki komponentom renderowanym po stronie serwera zmniejsza się ilość kodu wysyłanego do klienta, co umożliwia szybsze ładowanie strony. Nie trzeba już korzystać z getServerSideProps, ponieważ wszystkie komponenty domyślnie są renderowane po stronie serwera — jeśli komponent ma renderować się po stronie klienta, należy użyć składni „use client".
  • Nowy system ładowania czcionek pobiera je i osadza w zasobach aplikacji już na etapie budowania, dzięki czemu przeglądarka użytkownika nie wysyła żadnego zapytania do serwerów Google — to zysk zarówno dla szybkości, jak i dla prywatności. W komponencie Link zniknął obowiązek zagnieżdżania znacznika a w środku. Komponent Image dostał natomiast właściwość fill, która pozwala wypełnić obrazem element nadrzędny bez podawania wymiarów, i stał się łatwiejszy w stylowaniu — ale opis alternatywny nadal jest wymagany, i słusznie, bo bez niego cierpi dostępność i SEO.
  • Turbopack to napisany w języku Rust następca Webpacka, przedstawiony razem z Next.js 13. Twórcy zapowiadali go porównaniami rzędu setek razy szybszego odświeżania niż Webpack i kilkukrotnej przewagi nad Vite — te liczby dotyczyły wybranych scenariuszy testowych i były wtedy przedmiotem sporu w środowisku, więc lepiej traktować je jako materiał marketingowy niż gwarancję. W momencie premiery narzędzie było w fazie beta; realne, powtarzalne przyspieszenie przyniosły dopiero kolejne wydania, w których Turbopack został ustabilizowany.

Blog

Powiązane artykuły

Czytaj więcej
Front-end

Jak działa CDN, czyli sieć dostarczania treści?

CDN, czyli sieć dostarczania treści, to system, który pozwala na przyspieszenie i zwiększenie niezawodności dostarczania treści na stronie internetowej. Działa on na zasadzie rozproszenia serwerów, które przechowują kopie treści strony w różnych lokalizacjach geograficznych.

Tomasz Kozon
18 maj 2022
Front-end

Jak uczyć się Reacta?

React to popularna biblioteka JavaScript do tworzenia interaktywnych interfejsów użytkownika. W tym artykule przedstawimy kilka sposobów, jak można nauczyć się Reacta i zacząć tworzyć swoje własne projekty.

Tomasz Kozon
07 cze 2023
Front-end

Hygraph – nowoczesny headless CMS

Systemy Zarządzania Treścią, czyli CMS, wpływają na rozwój stron internetowych od lat. Hygraph, w ramach nowoczesnej technologii headless, oferuje nową perspektywę na zarządzanie treścią. Omówimy, jak Hygraph może kształtować przyszłość CMSów.

Tomasz Kozon
06 lis 2025
Front-end

Jam Stack – przełom czy dobrze znana technologia?

Jam Stack to technologia, która polega na budowaniu aplikacji internetowych za pomocą statycznie generowanych stron, które są hostowane na serwerach CDN. Jest coraz bardziej popularny wśród programistów, ponieważ oferuje wiele korzyści, takich jak szybkość, niskie koszty utrzymania i bezpieczeństwo.

Tomasz Kozon
17 lut 2022
Front-end

Client-side Hydration: jak działa i dlaczego jest kluczowa dla nowoczesnych aplikacji webowych

Nowoczesne aplikacje webowe muszą być jednocześnie szybkie, interaktywne i przyjazne dla użytkownika już od pierwszego załadowania strony. Właśnie w tym kontekście coraz większe znaczenie zyskuje client-side hydration, czyli mechanizm łączący renderowanie po stronie serwera z logiką uruchamianą w przeglądarce. Dzięki niemu możliwe jest wyświetlenie treści niemal natychmiast, a następnie płynne przejście do pełnej interaktywności aplikacji.

Tomasz Kozon
13 gru 2025
Front-end

Turbopack w praktyce: jak działa nowy bundler od Vercela

Rosnąca złożoność aplikacji webowych sprawia, że wydajność narzędzi developerskich ma dziś ogromne znaczenie. Turbopack, nowy bundler od Vercela, powstał jako odpowiedź na ograniczenia klasycznych rozwiązań, takich jak Webpack, szczególnie w dużych projektach Next.js. Jego głównym celem jest maksymalne skrócenie czasu startu aplikacji i natychmiastowy hot reload podczas pracy z kodem.

Tomasz Kozon
06 gru 2025