Oczekiwanie na parametry trasy
Część sekcji Podstawy Next.js ścieżki React w Coddy. Lekcja 24 z 47.
Trasa dynamiczna przekazuje stronie segment adresu URL za pomocą params. W Next 15 warto zapamiętać pewien haczyk:
params to obietnica.
// app/menu/[slug]/page.jsx
export default async function DishPage({ params }) {
const { slug } = await params;
// /menu/carbonara -> slug === 'carbonara'
}Zapomnij o await, a nic się nie wysypie — i właśnie dlatego łatwo tego nie zauważyć. Destrukturyzacja obietnicy daje po prostu undefined:
const { slug } = params; // undefined
const dish = await getDish(slug); // niczego nie wyszukujeStrona nadal się renderuje. Jest po prostu pusta albo pełna wartości zastępczych, a ty szukasz błędu w warstwie danych, którego nigdy tam nie było.
Ta sama zasada dotyczy searchParams. Oba są obietnicami, oba wymagają użycia await, a oba są dostępne tylko w komponentach serwerowych async, co jest kolejnym powodem, dla którego napisana przed chwilą strona musiała być asynchroniczna.
Po co w ogóle obietnice? Dzięki nim Next.js może zacząć renderować te części strony, które nie zależą od adresu URL, zanim skończy ustalać te, które od niego zależą.
Wyzwanie
Łatwyapp/menu/[slug]/page.jsx jest prawie poprawny, ale nie oczekuje na params, więc każda potrawa jest wyświetlana jako Unknown dish.
- Przed destrukturyzacją zaczekaj na
params:const { slug } = await params;
lib/data.js i strona główna są zablokowane. Odwiedzenie /menu/carbonara musi wyświetlić Carbonara w #dish-name, a jej cenę w #dish-price.
Spróbuj swoich sił
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy Next.js
4Serwer i klient
Dwa rodzaje komponentówOdczytywanie błęduLinia „use client”Ograniczaj części klienckieSerwer wewnątrz klientaPodsumowanie: serwer i klient7Nawigacja po stronie klienta
Aktywny linkRouting programowyFiltrowanie za pomocą URLObsługa trasPodsumowanie: nawigacja2Routing i linki
Foldery to ścieżkiZagnieżdżone ścieżkiŁączenie stronDynamiczne ścieżkiStrony nie znalezionoPodsumowanie: routing5Dane na serwerze
Komponenty asynchroniczneOczekiwanie na parametry trasyDwa pobrania narazStany ładowaniaObsługa błędówPodsumowanie: pobieranie danych