Tạo một ứng dụng React

Nếu bạn muốn xây dựng một ứng dụng hoặc trang web mới bằng React, chúng tôi khuyên bạn nên bắt đầu với một framework.

Nếu ứng dụng của bạn có những hạn chế mà các framework hiện có không đáp ứng được, bạn thích tự xây dựng framework của riêng mình hoặc bạn chỉ muốn tìm hiểu những điều cơ bản của một ứng dụng React, bạn có thể xây dựng một ứng dụng React từ đầu.

Các framework Full-stack

Các framework được đề xuất này hỗ trợ tất cả các tính năng bạn cần để triển khai và mở rộng ứng dụng của mình trong môi trường production. Chúng đã tích hợp các tính năng React mới nhất và tận dụng kiến trúc của React.

Note

Các framework Full-stack không yêu cầu máy chủ.

Tất cả các framework trên trang này đều hỗ trợ hiển thị phía máy khách (CSR), ứng dụng một trang (SPA) và tạo trang web tĩnh (SSG). Các ứng dụng này có thể được triển khai tới CDN hoặc dịch vụ lưu trữ tĩnh mà không cần máy chủ. Ngoài ra, các framework này cho phép bạn thêm hiển thị phía máy chủ trên cơ sở từng route, khi nó có ý nghĩa đối với trường hợp sử dụng của bạn.

Điều này cho phép bạn bắt đầu với một ứng dụng chỉ dành cho máy khách và nếu nhu cầu của bạn thay đổi sau này, bạn có thể chọn sử dụng các tính năng của máy chủ trên các route riêng lẻ mà không cần viết lại ứng dụng của mình. Xem tài liệu của framework của bạn để biết cách định cấu hình chiến lược hiển thị.

Next.js (App Router)

App Router của Next.js là một framework React tận dụng tối đa kiến trúc của React để cho phép các ứng dụng React full-stack.

Terminal
npx create-next-app@latest

Next.js được duy trì bởi Vercel. Bạn có thể triển khai một ứng dụng Next.js tới bất kỳ Node.js hoặc dịch vụ lưu trữ serverless nào hoặc tới máy chủ của riêng bạn. Next.js cũng hỗ trợ xuất tĩnh mà không yêu cầu máy chủ. Vercel cũng cung cấp các dịch vụ đám mây trả phí tùy chọn.

React Router (v7)

React Router là thư viện định tuyến phổ biến nhất cho React và có thể được ghép nối với Vite để tạo một framework React full-stack. Nó nhấn mạnh các API Web tiêu chuẩn và có một số template sẵn sàng để triển khai cho các runtime và nền tảng JavaScript khác nhau.

Để tạo một dự án framework React Router mới, hãy chạy:

Terminal
npx create-react-router@latest

React Router được duy trì bởi Shopify.

Expo (cho ứng dụng native)

Expo là một framework React cho phép bạn tạo các ứng dụng Android, iOS và web đa năng với giao diện người dùng native thực sự. Nó cung cấp một SDK cho React Native giúp các phần native dễ sử dụng hơn. Để tạo một dự án Expo mới, hãy chạy:

Terminal
npx create-expo-app@latest

Nếu bạn mới làm quen với Expo, hãy xem hướng dẫn về Expo.

Expo được duy trì bởi Expo (công ty). Xây dựng ứng dụng bằng Expo là miễn phí và bạn có thể gửi chúng lên các cửa hàng ứng dụng của Google và Apple mà không bị hạn chế. Expo cũng cung cấp các dịch vụ đám mây trả phí tùy chọn.

Các framework khác

Có những framework mới nổi khác đang hướng tới tầm nhìn React full-stack của chúng tôi:

  • TanStack Start (Beta): TanStack Start là một framework React full-stack được hỗ trợ bởi TanStack Router. Nó cung cấp SSR toàn bộ tài liệu, streaming, các hàm server, bundling và hơn thế nữa bằng cách sử dụng các công cụ như Nitro và Vite.
  • RedwoodJS: Redwood là một framework React full-stack với rất nhiều gói và cấu hình được cài đặt sẵn, giúp bạn dễ dàng xây dựng các ứng dụng web full-stack.
Tìm hiểu sâu

Những tính năng nào tạo nên tầm nhìn kiến trúc full-stack của nhóm React?

Bundler App Router của Next.js triển khai đầy đủ đặc tả React Server Components chính thức. Điều này cho phép bạn kết hợp các thành phần build-time, chỉ dành cho server và tương tác trong một cây React duy nhất.

Ví dụ: bạn có thể viết một thành phần React chỉ dành cho server dưới dạng một hàm async đọc từ cơ sở dữ liệu hoặc từ một tệp. Sau đó, bạn có thể truyền dữ liệu từ đó xuống các thành phần tương tác của mình:

// Thành phần này chỉ chạy trên server (hoặc trong quá trình build).
async function Talks({ confId }) {
// 1. Bạn đang ở trên server, vì vậy bạn có thể nói chuyện với lớp dữ liệu của mình. Không yêu cầu API endpoint.
const talks = await db.Talks.findAll({ confId });

// 2. Thêm bất kỳ lượng logic hiển thị nào. Nó sẽ không làm cho bundle JavaScript của bạn lớn hơn.
const videos = talks.map(talk => talk.video);

// 3. Truyền dữ liệu xuống các thành phần sẽ chạy trong trình duyệt.
return <SearchableVideoList videos={videos} />;
}

App Router của Next.js cũng tích hợp tìm nạp dữ liệu với Suspense. Điều này cho phép bạn chỉ định trạng thái tải (như một placeholder skeleton) cho các phần khác nhau của giao diện người dùng của bạn trực tiếp trong cây React của bạn:

<Suspense fallback={<TalksLoading />}>
<Talks confId={conf.id} />
</Suspense>

Server Components và Suspense là các tính năng của React chứ không phải là tính năng của Next.js. Tuy nhiên, việc áp dụng chúng ở cấp độ framework đòi hỏi sự chấp thuận và công việc triển khai không hề nhỏ. Hiện tại, Next.js App Router là triển khai hoàn chỉnh nhất. Nhóm React đang làm việc với các nhà phát triển bundler để giúp các tính năng này dễ triển khai hơn trong thế hệ framework tiếp theo.

Bắt đầu từ đầu

Nếu ứng dụng của bạn có những hạn chế mà các framework hiện có không đáp ứng được, bạn thích tự xây dựng framework của riêng mình hoặc bạn chỉ muốn tìm hiểu những điều cơ bản của một ứng dụng React, thì có những tùy chọn khác để bắt đầu một dự án React từ đầu.

Bắt đầu từ đầu mang lại cho bạn sự linh hoạt hơn, nhưng đòi hỏi bạn phải đưa ra lựa chọn về công cụ nào sẽ sử dụng cho định tuyến, tìm nạp dữ liệu và các mẫu sử dụng phổ biến khác. Nó giống như việc xây dựng framework của riêng bạn hơn là sử dụng một framework đã tồn tại. Các framework mà chúng tôi khuyên dùng có các giải pháp tích hợp cho những vấn đề này.

Nếu bạn muốn xây dựng các giải pháp của riêng mình, hãy xem hướng dẫn của chúng tôi về xây dựng một ứng dụng React từ đầu để biết hướng dẫn về cách thiết lập một dự án React mới bắt đầu với một công cụ build như Vite, Parcel hoặc RSbuild.


Nếu bạn là tác giả của một framework và muốn được đưa vào trang này, vui lòng cho chúng tôi biết.