Hai lần gọi dữ liệu cùng lúc
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 25 trên 47.
Một trang thường cần nhiều thứ. Cách viết dễ thấy nhất cũng là cách chậm nhất:
const dishes = await getDishes(); // 60ms
const drinks = await getDrinks(); // 60ms, chỉ bắt đầu lúc này
// tổng cộng: 120msawait có nghĩa là dừng lại ở đây. Lần tải thứ hai chỉ bắt đầu sau khi lần tải thứ nhất hoàn tất, dù nó không cần kết quả của lần tải thứ nhất.
Khởi chạy cả hai, rồi chờ cả hai:
const [dishes, drinks] = await Promise.all([
getDishes(),
getDrinks(),
]);
// tổng thời gian: 60msBí quyết nằm ở thời điểm gọi. Gọi getDishes() mà không có await sẽ bắt đầu xử lý và trả về một promise ngay lập tức, nên đến khi Promise.all bắt đầu chờ thì cả hai lượt tải đều đang chạy. Hàm này trả về một mảng kết quả theo thứ tự bạn đã liệt kê.
Quy tắc chung:
- Kết quả của một lần tải cần kết quả của lần tải kia → dùng các lệnh
awaittuần tự, không có cách nào khác - Chúng độc lập với nhau →
Promise.all
Hai lượt tải là một thành công nhỏ. Năm lượt tạo nên sự khác biệt giữa một trang tải tức thì và một trang không như vậy.
Thử thách
Dễapp/page.jsx tải các món ăn và đồ uống lần lượt. Chúng không liên quan đến nhau, nên hãy chạy chúng cùng lúc.
- Thay hai
awaitchạy lần lượt bằng mộtawait Promise.all([...]), rồi phân rã kết quả thànhdishesvàdrinks.
lib/data.js đã bị khóa và theo dõi xem hai lần tải có chạy chồng lên nhau hay không. Cuối cùng, #report phải hiển thị Ran together thay vì Ran one at a time.
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