Chờ tham số của tuyến
Thuộc phần Kiến thức thiết yếu về Next.js trong hành trình React của Coddy. Bài học 24 trên 47.
Đường dẫn động chuyển phần URL cho trang của bạn thông qua params. Trong Next 15 có một điểm cần ghi nhớ:
params là một promise.
// app/menu/[slug]/page.jsx
export default async function DishPage({ params }) {
const { slug } = await params;
// /menu/carbonara -> slug === 'carbonara'
}Bỏ quên await cũng không gây lỗi, chính điều đó khiến lỗi này khó phát hiện. Giải cấu trúc một promise chỉ cho bạn undefined:
const { slug } = params; // undefined
const dish = await getDish(slug); // không tìm thấy gìTrang vẫn hiển thị. Chỉ là trang trống hoặc toàn nội dung dự phòng, vậy mà bạn lại lục tìm lỗi trong lớp dữ liệu dù ở đó chẳng hề có lỗi.
Quy tắc tương tự cũng áp dụng cho searchParams. Cả hai đều là promise, cả hai đều cần được chờ bằng await và chỉ có trong các component máy chủ async, đây là thêm một lý do khiến trang bạn vừa viết phải là hàm bất đồng bộ.
Tại sao cần promise? Nhờ vậy, Next.js có thể bắt đầu hiển thị những phần trên trang không phụ thuộc vào URL trước khi xác định xong những phần có phụ thuộc vào URL.
Thử thách
Dễapp/menu/[slug]/page.jsx gần đúng rồi, nhưng chưa bao giờ chờ params, nên món ăn nào cũng trả về Unknown dish.
- Chờ
paramstrước khi phân rã:const { slug } = await params;
lib/data.js và trang chủ đã bị khóa. Truy cập /menu/carbonara phải hiển thị Carbonara trong #dish-name và giá của món đó trong #dish-price.
Tự làm thử
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức thiết yếu về Next.js
4Máy chủ và client
Hai loại thành phầnĐọc lỗiDòng 'use client'Giữ phần client nhỏ gọnMáy chủ bên trong clientTóm tắt: máy chủ và client7Điều hướng phía máy khách
Liên kết đang hoạt độngĐiều hướng bằng codeLọc bằng URLBộ xử lý tuyến đườngÔn tập: Điều hướng2Định tuyến và liên kết
Thư mục tạo thành tuyến đườngTuyến đường lồng nhauLiên kết các trangTuyến đường độngTrang không tìm thấyÔn tập: định tuyến5Dữ liệu trên máy chủ
Thành phần bất đồng bộChờ tham số của tuyếnHai lần gọi dữ liệu cùng lúcTrạng thái tảiXử lý lỗiÔn tập: Lấy dữ liệu