Siêu dữ liệu động
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 15 trên 47.
Đối tượng metadata là hằng số nên không thể dùng cho một tuyến động: app/dishes/[slug]/page.jsx hiển thị một món ăn khác nhau ở mỗi URL, và mỗi món cần tiêu đề riêng.
Để làm vậy, hãy xuất một hàm thay vào đó:
export async function generateMetadata({ params }) {
const { slug } = await params;
return { title: DISHES[slug].name };
}Nó nhận cùng params như trang (một promise, nên bạn await nó) và trả về đối tượng có cấu trúc giống với đối tượng metadata. Hãy dùng một trong hai cách, không dùng cả hai trong cùng một tệp.
Mẫu tiêu đề
Việc lặp lại tên trang web trong tiêu đề của mọi trang sẽ nhanh chóng trở nên nhàm chán. Thay vì một chuỗi thông thường, layout có thể truyền xuống một mẫu:
// app/layout.jsx
export const metadata = {
title: {
default: 'Coddy Eats',
template: '%s | Coddy Eats',
},
};default: tiêu đề cho những trang không đặt tiêu đềtemplate: mẫu dành cho những trang có đặt tiêu đề; tiêu đề của trang sẽ được chèn vào vị trí của%s
Vì vậy, trang trả về title: 'Margherita' sẽ hiển thị Margherita | Coddy Eats trên thẻ, còn trang chủ không đặt giá trị nào sẽ giữ nguyên Coddy Eats. Hãy viết thương hiệu một lần trong bố cục.
Thử thách
Trung bìnhHiện tại, trang của mỗi món ăn đều hiển thị Coddy Eats trên tab. Đặt tiêu đề riêng cho từng trang.
Trong app/dishes/[slug]/page.jsx, thêm một hàm async được export tên là generateMetadata, hàm này:
- Nhận
{ params }và chờ kết quả để lấyslug - Trả về
{ title: DISHES[slug].name }
app/layout.jsx đã có mẫu '%s | Coddy Eats', nên tiêu đề của /dishes/margherita sẽ là Margherita | Coddy Eats. Hãy xem tệp layout, bạn không cần thay đổi tệp này.
Tự làm thử
import './globals.css';
export const metadata = {
title: {
default: 'Coddy Eats',
template: '%s | Coddy Eats',
},
};
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ến3Bố cục và siêu dữ liệu
Bố cục gốcĐiều hướng dùng chungBố cục lồng nhauSiêu dữ liệu trangSiêu dữ liệu độngÔn tập: bố cục