hovanban
Well-known member
Next.js 13.4 một phiên bản cơ bản, đánh dấu sự ổn định cho App Router.
Hôm nay (05/05), với việc phát hành bản 13.4, giờ đây bạn có thể bắt đầu sử dụng App Router cho sản phẩm của mình.
Next.js App Router
Chúng tôi đã phát hành Next.js vào năm 2016 để cung cấp một cách dễ dàng cho các ứng dụng React render phía máy chủ, với mục tiêu của chúng tôi là tạo ra một trang web linh hoạt, được cá nhân hóa và toàn cầu hơn.
Trong bài đăng thông báo ban đầu, chúng tôi đã chia sẻ một số nguyên tắc thiết kế của Next.js:
Chúng tôi đang làm việc trên thế hệ tiếp theo của Next.js và hôm nay với phiên bản 13.4, thế hệ tiếp theo này đã ổn định và sẵn sàng để sử dụng. Bài viết này sẽ chia sẻ thêm về các quyết định và lựa chọn thiết kế cho App Router của chúng tôi.
Không cần cài đặt. Sử dụng hệ thống tệp tin như một API
Routing dựa trên hệ thống tệp tin đã trở thành một tính năng cốt lõi của Next.js. Trong bài viết ban đầu của chúng tôi, chúng tôi đã trình bày ví dụ này về cách tạo tuyến đường từ một thành phần React duy nhất:
Không cần phải cấu hình thêm. Chỉ cần thả một tệp tin thư mục pages/ và bộ định tuyến Next.js sẽ lo phần còn lại. Chúng tôi vẫn thích sự đơn giản này với routing. Nhưng khi việc sử dụng framework tăng lên, thì các developers cúng muốn xây dựng các giao diện khác nhau với sự linh hoạt hơn.
Các developers đã yêu cầu hỗ trợ cải thiện việc xác định layouts (bố cục), nhúng các thành phần giao diện(UI) như layouts và linh hoạt hơn trong việc xác định trạng thái tải và lỗi. Đây không phải là điều dễ dàng để trang bị thêm vào bộ định tuyến Next.js hiện có.
Mọi phần của framework phải được thiết kế xung quanh bộ định tuyến. Chuyển trang, tìm nạp dữ liệu, lưu vào bộ nhớ đệm, thay đổi và xác thực lại dữ liệu, phát trực tuyến, định dạng nội dung, v.v.
Để làm cho bộ định tuyến của chúng tôi tương thích với phát trực tuyến và giải quyết các yêu cầu này để hỗ trợ tốt hơn cho các layouts, chúng tôi bắt đầu xây dựng một phiên bản mới của bộ định tuyến.
Đây là kết quả sau khi chúng tôi phát hành lần đầu Layouts RFC (Request for Comment) của chúng tôi.
Quan trọng hơn những gì bạn thấy ở đây là những gì bạn không thấy. Bộ định tuyến mới này (có thể được áp dụng từng phần thông qua thư mục app/) có kiến trúc hoàn toàn khác, được xây dựng trên nền tảng của React Server Component và Suspense.
Nền tảng này đã cho phép chúng tôi loại bỏ các API cụ thể cho Next.js ban đầu được phát triển để mở rộng các nguyên tắc cơ bản React. Ví dụ: bạn không còn phải sử dụng tệp _app tùy chỉnh nữa để tùy chỉnh layouts chung toàn cục:
Với Pages Router, việc kết hợp layouts không thể được thực hiện và việc lấy dữ liệu không thể được đặt cùng với component. Với App Router mới, điều này đã được hỗ trợ.
Với Pages Router, _document được sử dụng để tùy chỉnh payload ban đầu từ máy chủ.
Với App Router, bạn không cần phải nhập , và từ Next.js nữa. Thay vào đó, bạn chỉ cần sử dụng React.
Việc xây dựng một bộ định tuyến hệ thống tệp tin mới cũng là thời điểm thích hợp để giải quyết nhiều yêu cầu tính năng liên quan khác liên quan quan đến hệ thống định tuyến của chúng tôi. Ví dụ:
CÔNG TY TNHH TƯ VẤN TRUYỀN THÔNG MINARA
ĐỊA CHỈ:
- 182 Trần Bình Trọng, P.3, Q.5, Tp.HCM
- 27 Đường số 16, Trung Tâm Hành Chính Dĩ An, Bình Dương.
Điện thoại: 097.777.1060
Email: info@minara.vn
Website: www.minara.vn
- App Router (Stable):
- React Server Components
- Nested Routes & Layouts
- Simplified Data Fetching (Lấy dữ liệu đơn giản hơn)
- Streaming & Suspense (Phát trực tiếp và Suspense)
- Built-in SEO Support (Hỗ trợ SEO tích hợp sẵn)
- Turbopack (Beta): Máy chủ chạy trên localhost của bạn, nhanh hơn và độ ổn định được cải thiện.
- Server Actions (Alpha): Thay đổi dữ liệu trên máy chủ mà không cần JavaScript trên client
Hôm nay (05/05), với việc phát hành bản 13.4, giờ đây bạn có thể bắt đầu sử dụng App Router cho sản phẩm của mình.
npm i next@latest react@latest react-dom@latest eslint-config-next@latest
Next.js App Router
Chúng tôi đã phát hành Next.js vào năm 2016 để cung cấp một cách dễ dàng cho các ứng dụng React render phía máy chủ, với mục tiêu của chúng tôi là tạo ra một trang web linh hoạt, được cá nhân hóa và toàn cầu hơn.
Trong bài đăng thông báo ban đầu, chúng tôi đã chia sẻ một số nguyên tắc thiết kế của Next.js:
- Không cần cài đặt. Sử dụng hệ thống tệp tin như một API
- Chỉ có JavaScript. Tất cả đều là một hàm
- Tự động render trên máy chủ và chia nhỏ mã nguồn
- Việc lấy dữ liệu tùy thuộc vào developer
Chúng tôi đang làm việc trên thế hệ tiếp theo của Next.js và hôm nay với phiên bản 13.4, thế hệ tiếp theo này đã ổn định và sẵn sàng để sử dụng. Bài viết này sẽ chia sẻ thêm về các quyết định và lựa chọn thiết kế cho App Router của chúng tôi.
Không cần cài đặt. Sử dụng hệ thống tệp tin như một API
Routing dựa trên hệ thống tệp tin đã trở thành một tính năng cốt lõi của Next.js. Trong bài viết ban đầu của chúng tôi, chúng tôi đã trình bày ví dụ này về cách tạo tuyến đường từ một thành phần React duy nhất:
// Pages Router
// pages/about.js
import React from 'react';
export default () => <h1>About us</h1>;
Không cần phải cấu hình thêm. Chỉ cần thả một tệp tin thư mục pages/ và bộ định tuyến Next.js sẽ lo phần còn lại. Chúng tôi vẫn thích sự đơn giản này với routing. Nhưng khi việc sử dụng framework tăng lên, thì các developers cúng muốn xây dựng các giao diện khác nhau với sự linh hoạt hơn.
Các developers đã yêu cầu hỗ trợ cải thiện việc xác định layouts (bố cục), nhúng các thành phần giao diện(UI) như layouts và linh hoạt hơn trong việc xác định trạng thái tải và lỗi. Đây không phải là điều dễ dàng để trang bị thêm vào bộ định tuyến Next.js hiện có.
Mọi phần của framework phải được thiết kế xung quanh bộ định tuyến. Chuyển trang, tìm nạp dữ liệu, lưu vào bộ nhớ đệm, thay đổi và xác thực lại dữ liệu, phát trực tuyến, định dạng nội dung, v.v.
Để làm cho bộ định tuyến của chúng tôi tương thích với phát trực tuyến và giải quyết các yêu cầu này để hỗ trợ tốt hơn cho các layouts, chúng tôi bắt đầu xây dựng một phiên bản mới của bộ định tuyến.
Đây là kết quả sau khi chúng tôi phát hành lần đầu Layouts RFC (Request for Comment) của chúng tôi.
// New: App Router ✨
// app/layout.js
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
// app/page.js
export default function Page() {
return <h1>Hello, Next.js!</h1>;
}
Quan trọng hơn những gì bạn thấy ở đây là những gì bạn không thấy. Bộ định tuyến mới này (có thể được áp dụng từng phần thông qua thư mục app/) có kiến trúc hoàn toàn khác, được xây dựng trên nền tảng của React Server Component và Suspense.
Nền tảng này đã cho phép chúng tôi loại bỏ các API cụ thể cho Next.js ban đầu được phát triển để mở rộng các nguyên tắc cơ bản React. Ví dụ: bạn không còn phải sử dụng tệp _app tùy chỉnh nữa để tùy chỉnh layouts chung toàn cục:
// Pages Router
// pages/_app.js
// "global layout" này bao quanh tất cả các đường dẫn.
// Không có cách nào để kết hợp các thành phần bố cục khác
// và bạn không thể lấy dữ liệu toàn cầu từ tệp này.
// data from this file.
export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />;
}
Với Pages Router, việc kết hợp layouts không thể được thực hiện và việc lấy dữ liệu không thể được đặt cùng với component. Với App Router mới, điều này đã được hỗ trợ.
// New: App Router ✨
// app/layout.js
//
// Bố cục gốc được chia sẻ cho toàn bộ ứng dụng
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
// app/dashboard/layout.js
//
// Các bố cục có thể được lồng nhau và kết hợp.
export default function DashboardLayout({ children }) {
return (
<section>
<h1>Dashboard</h1>
{children}
</section>
);
}
Với Pages Router, _document được sử dụng để tùy chỉnh payload ban đầu từ máy chủ.
// Pages Router
// pages/_document.js
// Tệp này cho phép bạn tùy chỉnh các thẻ <html> và <body> cho yêu cầu từ máy chủ,
// nhưng thay vì viết các phần tử HTML, nó thêm các tính năng cụ thể cho framework.
import { Html, Head, Main, NextScript } from 'next/document';
export default function Document() {
return (
<Html>
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
Với App Router, bạn không cần phải nhập , và từ Next.js nữa. Thay vào đó, bạn chỉ cần sử dụng React.
// New: App Router ✨
// app/layout.js
//
// The root layout is shared for the entire application
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
Việc xây dựng một bộ định tuyến hệ thống tệp tin mới cũng là thời điểm thích hợp để giải quyết nhiều yêu cầu tính năng liên quan khác liên quan quan đến hệ thống định tuyến của chúng tôi. Ví dụ:
- Trước đây, bạn chỉ có thể import global stylesheets từ các gói npm bên ngoài (giống component libraries) trong _app.js. Đây là một trải nghiệm không lý tưởng dành cho developer. Với App Router, bạn có import(và định vị) bất kỳ tệp CSS nào trong bất kỳ component nào.
- Trước đây, việc kích hoạt kết xuất phía máy chủ với Next.js (thông qua getServerSideProps) có nghĩa là tương tác với ứng dụng của bạn bị chặn cho đến khi toàn bộ trang web được kích hoạt. Với App Router, chúng tôi đã tái cấu trúc kiến trúc để tích hợp sâu với React Suspense, nghĩa là chúng tôi có thể kích hoạt lựa chọn một phần của trang mà không chặn các thành phần khác trong giao diện người dùng khỏi việc tương tác. Nội dung có thể được truyền trực tiếp ngay lập tức từ máy chủ, cải thiện hiệu suất tải của một trang.
CÔNG TY TNHH TƯ VẤN TRUYỀN THÔNG MINARA
ĐỊA CHỈ:
- 182 Trần Bình Trọng, P.3, Q.5, Tp.HCM
- 27 Đường số 16, Trung Tâm Hành Chính Dĩ An, Bình Dương.
Điện thoại: 097.777.1060
Email: info@minara.vn
Website: www.minara.vn
Chỉnh sửa lần cuối: