Với nhu cầu ngày càng tăng đối với các nhà phát triển Next.js, người tìm việc cần chuẩn bị cho các cuộc phỏng vấn Next.js.
Trong bài viết này, tôi đã sắp xếp các câu hỏi và câu trả lời phỏng vấn Next.js thường gặp thành ba phần dựa trên mức độ khó: người mới bắt đầu, trung cấp và chuyên gia.
Bạn đang muốn vượt qua cuộc phỏng vấn Next.js của mình ?
Nếu vậy, hướng dẫn này là dành cho bạn.
Next.js là một khung nguồn mở dựa trên React giúp các nhà phát triển xây dựng các ứng dụng React được kết xuất phía máy chủ.
Sự khác biệt chính giữa React và Next.js là cách chúng xử lý định tuyến. React sử dụng định tuyến phía máy khách, nghĩa là quá trình chuyển đổi trang được xử lý hoàn toàn ở phía máy khách bằng JavaScript.
Ngược lại, Next.js cung cấp tính năng định tuyến phía máy chủ, nghĩa là máy chủ xử lý việc định tuyến và gửi các trang được kết xuất trước tới máy khách, giúp tải trang nhanh hơn và SEO tốt hơn.
Next.js cũng cung cấp các tính năng bổ sung như tách mã tự động, tạo trang tĩnh và nhập động.
Next.js cung cấp một số lợi thế so với React, bao gồm hiển thị phía máy chủ, tách mã tự động, tạo trang tĩnh, nhập động, hiệu suất được tối ưu hóa và triển khai dễ dàng. Ngoài ra, Next.js hỗ trợ SEO và phân tích tích hợp, giúp tối ưu hóa ứng dụng của bạn cho các công cụ tìm kiếm và theo dõi mức độ tương tác của người dùng dễ dàng hơn.
Để tạo ứng dụng Next.js mới, bạn có thể sử dụng lệnh create-next-app
. Ví dụ: bạn có thể chạy lệnh sau trong thiết bị đầu cuối của mình: npx create-next-app my-app
. Điều này sẽ tạo một ứng dụng Next.js mới với tên my-app
.
Kết xuất phía máy chủ (SSR) là quá trình kết xuất một trang web trên máy chủ trước khi gửi nó tới trình duyệt của khách hàng. SSR rất quan trọng vì nó cho phép các công cụ tìm kiếm thu thập dữ liệu và lập chỉ mục nội dung trang web của bạn, điều này có thể cải thiện SEO trang web của bạn. Ngoài ra, SSR có thể cải thiện thời gian tải trang ban đầu và cải thiện trải nghiệm người dùng cho người dùng có kết nối internet hoặc thiết bị chậm.
Kết xuất phía máy khách (CSR) là quá trình hiển thị trang web trên trình duyệt của máy khách bằng JavaScript sau khi nhận được HTML, CSS và JavaScript ban đầu từ máy chủ. Sự khác biệt chính giữa SSR và CSR là SSR gửi một trang HTML được hiển thị đầy đủ tới trình duyệt của khách hàng, trong khi CSR gửi một trang HTML trống được điền bằng JavaScript.
Tạo trang tĩnh (SSG) là quá trình tạo tệp HTML, CSS và JavaScript tĩnh cho mỗi trang trên trang web của bạn tại thời điểm xây dựng. Sự khác biệt chính giữa SSG và SSR là SSG tạo một tệp tĩnh có thể được cung cấp từ mạng phân phối nội dung (CDN), trong khi SSR tạo HTML động trên máy chủ và gửi nó tới trình duyệt của máy khách.
Next.js sử dụng định tuyến dựa trên tệp, nghĩa là bạn có thể tạo một trang bằng cách tạo một tệp mới trong thư mục pages
có đường dẫn URL tương ứng. Ví dụ: để tạo một trang có đường dẫn URL /about
, bạn sẽ tạo một tệp có tên about.js
trong thư mục pages
.
getStaticProps
trong Next.js là gì? Hàm getStaticProps
được sử dụng để tìm nạp dữ liệu tại thời điểm xây dựng để tạo trang web tĩnh. Hàm này được gọi trong quá trình xây dựng và có thể được sử dụng để tìm nạp dữ liệu từ cơ sở dữ liệu hoặc API bên ngoài. Dữ liệu được trả về bởi getStaticProps
sau đó được chuyển dưới dạng đạo cụ cho thành phần trang.
Next.js cung cấp một số cách để truyền dữ liệu giữa các trang trong ứng dụng Next.js, bao gồm các tham số truy vấn URL, API Router
và các thư viện quản lý trạng thái như Redux hoặc React Context. Bạn cũng có thể sử dụng chức năng getServerSideProps
để tìm nạp dữ liệu trên máy chủ và chuyển nó dưới dạng đạo cụ cho thành phần trang.
Các ứng dụng Next.js có thể được triển khai trên nhiều nền tảng khác nhau, bao gồm các dịch vụ đám mây như AWS, Google Cloud Platform và Microsoft Azure, cũng như các nền tảng như Vercel và Netlify. Để triển khai ứng dụng Next.js, bạn có thể sử dụng lệnh next export
để xuất tệp tĩnh cho SSG hoặc sử dụng công cụ triển khai dành riêng cho nền tảng như CLI của Vercel hoặc AWS Elastic Beanstalk.
Kiến trúc serverless là mô hình điện toán đám mây trong đó nhà cung cấp đám mây quản lý cơ sở hạ tầng và tự động thay đổi quy mô tài nguyên dựa trên nhu cầu. Next.js có thể được sử dụng với kiến trúc serverless bằng cách triển khai ứng dụng lên nền tảng serverless như AWS Lambda hoặc Google Cloud Function.
getServerSideProps
và getStaticProps
trong Next.js là gì? Hàm getServerSideProps
được sử dụng để tìm nạp dữ liệu trên máy chủ trong thời gian chạy để hiển thị phía máy chủ, trong khi hàm getStaticProps
được sử dụng để tìm nạp dữ liệu tại thời điểm xây dựng để tạo trang web tĩnh.
getStaticPaths
trong Next.js là gì? Hàm getStaticPaths
được sử dụng để tạo đường dẫn động cho các trang có dữ liệu động. Hàm này được gọi trong quá trình xây dựng và có thể được sử dụng để tạo danh sách các giá trị có thể có cho dữ liệu động. Dữ liệu được trả về bởi getStaticPaths
sau đó được sử dụng để tạo các tệp tĩnh cho từng giá trị có thể.
Next.js sử dụng dấu ngoặc vuông []
để biểu thị các phân đoạn động trong đường dẫn URL. Ví dụ: để tạo một tuyến động cho các bài đăng trên blog có đường dẫn URL /blog/[slug]
, bạn sẽ tạo một tệp có tên [slug].js
trong thư mục pages/blog
.
Next.js tự động chia mã của bạn thành các phần nhỏ hơn để có thể tải theo yêu cầu khi người dùng điều hướng đến một trang mới. Điều này giúp giảm thời gian tải trang ban đầu và cải thiện hiệu suất ứng dụng của bạn.
_app.js
trong Next.js là gì? Tệp _app.js
được sử dụng để bọc toàn bộ ứng dụng và cung cấp kiểu toàn cầu, thành phần bố cục và nhà cung cấp ngữ cảnh. Tệp này được gọi trên mọi yêu cầu trang và có thể được sử dụng để thêm chức năng chung cho ứng dụng của bạn.
Next.js cung cấp một số tùy chọn để triển khai xác thực, bao gồm Mã thông báo Web JSON (JWT), OAuth và các thư viện của bên thứ ba như NextAuth.js. Bạn cũng có thể sử dụng kết xuất phía máy chủ và quản lý phiên để triển khai xác thực phía máy chủ.
Thành phần vùng chứa chịu trách nhiệm quản lý trạng thái và logic của thành phần, trong khi thành phần trình bày chịu trách nhiệm hiển thị giao diện người dùng dựa trên các đạo cụ được truyền từ thành phần vùng chứa.
useEffect
hook trong React là gì và nó liên quan như thế nào đến Next.js? Móc useEffect
được sử dụng để thực hiện các tác dụng phụ trong một thành phần chức năng, chẳng hạn như tìm nạp dữ liệu từ API hoặc cập nhật tiêu đề tài liệu. Trong Next.js, hook useEffect
có thể được sử dụng để
thực hiện tìm nạp dữ liệu phía máy khách bằng cách sử dụng API fetch
hoặc thư viện của bên thứ ba như Axios hoặc SWR.
Next.js cung cấp một số tùy chọn để xử lý lỗi, bao gồm các trang lỗi tùy chỉnh, xử lý lỗi phía máy chủ với getInitialProps
và xử lý lỗi phía máy khách với ranh giới lỗi React. Bạn cũng có thể sử dụng các thư viện của bên thứ ba như Sentry hoặc Rollbar để theo dõi và báo cáo lỗi.
Next.js cung cấp hỗ trợ tích hợp cho i18n thông qua thư viện next-i18next
. Bạn có thể sử dụng thư viện này để tạo bản dịch cho ứng dụng của mình và chuyển đổi giữa các ngôn ngữ dựa trên tùy chọn của người dùng hoặc cài đặt trình duyệt.
getServerSideProps
trong Next.js là gì và nó liên quan như thế nào đến hàm getInitialProps
? Hàm getServerSideProps
được sử dụng để tìm nạp dữ liệu trên máy chủ trong thời gian chạy để hiển thị phía máy chủ, trong khi hàm getInitialProps
được sử dụng để tìm nạp dữ liệu trên máy khách hoặc máy chủ trong thời gian chạy. Trong Next.js 9.3 trở lên, chức năng getInitialProps
không được dùng nữa để thay thế cho getServerSideProps
.
Next.js cung cấp hỗ trợ tích hợp cho bộ nhớ đệm phía máy chủ thông qua tiêu đề Cache-Control
. Bạn có thể đặt thời lượng bộ đệm cho mỗi trang bằng chức năng getServerSideProps
hoặc bằng cách đặt thuộc tính cacheControl
trong thành phần trang.
Chúng tôi cũng có thể sử dụng các thư viện bộ nhớ đệm như Redis hoặc Memcached để lưu trữ các phản hồi API hoặc truy vấn cơ sở dữ liệu. Các tùy chọn như bộ nhớ đệm CDN hoặc bộ đệm biên cũng có thể được triển khai để cải thiện hiệu suất của nội dung tĩnh và giảm tải cho máy chủ.
Có một số chiến lược để tối ưu hóa hiệu suất của ứng dụng Next.js, bao gồm tách mã, tải từng phần, tối ưu hóa hình ảnh, bộ nhớ đệm phía máy chủ và bộ nhớ đệm CDN. Bạn cũng có thể sử dụng các công cụ giám sát hiệu suất như Lighthouse hoặc WebPageTest để xác định các khu vực cần cải thiện.
Next.js cung cấp hỗ trợ tích hợp cho các chức năng serverless thông qua tính năng API Routes
. Bạn có thể tạo một hàm serverless bằng cách tạo một tệp trong thư mục pages/api
với tên điểm cuối mong muốn và triển khai logic phía máy chủ.
Bạn có thể triển khai CMS không đầu với Next.js bằng cách sử dụng CMS của bên thứ ba như Contentful, Strapi hoặc Sanity. Các nền tảng CMS này cung cấp API để tìm nạp và cập nhật nội dung, có thể được tích hợp với Next.js bằng cách sử dụng các hàm getStaticProps
hoặc getServerSideProps
.
Chúng ta có thể sử dụng API GraphQL hoặc REST để tìm nạp dữ liệu từ máy chủ và chuyển dữ liệu đó đến thành phần dưới dạng đạo cụ. Các thư viện như swr
hoặc react-query
cũng có thể được sử dụng để xử lý tìm nạp và lưu trữ dữ liệu.
Chúng tôi có thể sử dụng các công cụ của bên thứ ba như Google Optimize hoặc Optimizely để tạo thử nghiệm và theo dõi hành vi của người dùng. Chúng tôi cũng có thể sử dụng các giải pháp tùy chỉnh như cờ tính năng hoặc kết xuất có điều kiện để kiểm tra các biến thể khác nhau của ứng dụng.
Để xử lý các bản cập nhật theo thời gian thực trong ứng dụng Next.js, bạn có thể sử dụng các sự kiện do máy chủ gửi, ổ cắm web hoặc thư viện của bên thứ ba như Socket.io để thiết lập kết nối thời gian thực giữa máy khách và máy chủ. Bạn cũng có thể sử dụng các thư viện như react-use
hoặc redux
để xử lý cập nhật dữ liệu theo thời gian thực trong ứng dụng.
Để triển khai thử nghiệm và tích hợp liên tục trong ứng dụng Next.js, bạn có thể sử dụng các khung thử nghiệm như Jest hoặc Cypress để viết và chạy thử nghiệm. Bạn cũng có thể sử dụng các dịch vụ tích hợp liên tục như CircleCI hoặc Travis CI để tự động hóa quá trình thử nghiệm và triển khai. Ngoài ra, bạn có thể sử dụng các công cụ chất lượng mã như ESLint hoặc Prettier để đảm bảo tính nhất quán và khả năng bảo trì của mã.
Tôi đã đặt các câu hỏi và câu trả lời phỏng vấn Next.js này ngắn gọn và đi thẳng vào vấn đề. Bài viết này sẽ hoạt động như một bảng mẹo nhanh cho bất kỳ ai đang chuẩn bị cho cuộc phỏng vấn Next.js.
Tuy nhiên, hãy nhớ rằng bạn phải có kinh nghiệm làm việc tốt với Next.js để phù hợp với công việc.
Chúc may mắn!