- vừa được xem lúc

React Router từ cơ bản đến nâng cao (v6+) Phần 2

0 0 1

Người đăng: Tiến Minh

Theo Viblo Asia

Ở phần 1 chúng ta đã nói về một số điều cơ bản của React Router, trong bài viết này chúng ta sẽ đi đến những hướng dẫn nâng cao hơn nhé

Dynamic Routes

image.png Dynamic Routes cho phép bạn tạo các route có thể xử lý các phần thay đổi trong URL. Điều này rất hữu ích khi hiển thị chi tiết của một mục cụ thể, chẳng hạn như sản phẩm hoặc hồ sơ người dùng.

Để định nghĩa một route động trong React Router, bạn sử dụng cú pháp :param trong đường dẫn của route. Ví dụ:

import { useParams } from 'react-router-dom'; function ProductDetails() { const { productId } = useParams(); return <div>Product ID: {productId}</div>;
} function App() { return ( <BrowserRouter> <Routes> <Route path="/products/:productId" element={<ProductDetails />} /> </Routes> </BrowserRouter> );
}
  • Hook useParams(): Đây là một hook của React Router cho phép bạn truy cập các tham số động từ URL hiện tại. Bạn có thể gọi hook này trong component function được render bởi route động (trong trường hợp này là ProductDetails). Hook này trả về một đối tượng, trong đó các khóa là tên tham số được định nghĩa trong đường dẫn (ví dụ: productId) và các giá trị là các đoạn tương ứng từ URL.
  • :productId: Cú pháp này trong thuộc tính path của <Route> định nghĩa một đoạn động. Bất kỳ giá trị nào trong vị trí này của URL sẽ được lưu trữ như tham số productId. Ví dụ, nếu URL là /products/42, hook useParams() trong ProductDetails sẽ trả về { productId: "42" }.

Programmatic Navigation

Hook useNavigate: Hook này cho phép bạn điều hướng giữa các routes trong ứng dụng một cách lập trình, thay vì dựa vào các component như <Link> hay <NavLink>. Điều này rất hữu ích trong các tình huống như sau khi người dùng gửi form hoặc cần điều hướng sau khi xác thực thành công.

Ví dụ sử dụng useNavigate:

import { useNavigate } from 'react-router-dom'; function Home() { const navigate = useNavigate(); const handleClick = () => { navigate('/about'); }; return <button onClick={handleClick}>Go to About</button>;
}

<Navigate /> Component

Component <Navigate />: Component này được sử dụng để chuyển hướng người dùng đến một route khác. Thường thì, bạn sẽ dùng <Navigate /> trong các tình huống như chuyển hướng sau khi xác thực người dùng, hoặc khi người dùng thực hiện một hành động nhất định.

import { Navigate } from 'react-router-dom'; function ProtectedRoute({ isLoggedIn, children }) { if (!isLoggedIn) { return <Navigate to="/login" replace />; } return children;
}

Prop replace: Prop replace của <Navigate /> sẽ thay thế mục hiện tại trong ngăn xếp lịch sử (history stack) thay vì thêm một mục mới. Điều này hữu ích trong các tình huống như kiểm tra xác thực và chuyển hướng, để tránh người dùng quay lại trang cũ khi nhấn nút "back" trên trình duyệt.

Cách Routing Thay Đổi Cấu Trúc Component trong React

Không sử dụng Router (Cấu trúc Component Truyền thống): Thông thường, trong một ứng dụng React đơn giản (không sử dụng router), chúng ta cấu trúc các component bên trong component App như thế này:

function App() { return ( <div> <Header /> <Main /> <Footer /> </div> );
}

Ở đây, App đóng vai trò như một container cha chứa tất cả các component, và tất cả chúng thường được render cùng nhau.

Khi có sự tham gia của React Router: Khi chúng ta giới thiệu React Router, cách chúng ta cấu trúc App thay đổi. Thay vì giữ tất cả các component trực tiếp trong App, chúng ta chủ yếu giữ cấu hình <BrowserRouter>, <Routes>, và <Route> ở đó. Nội dung trang thực tế được render bởi các component được khớp với các route.

**Tại sao **

  1. Routing Điều Khiển Việc Hiển Thị

    • Trước khi có Router: App luôn render tất cả mọi thứ.
    • Với Router: Các trang khác nhau (routes) chỉ nên được load khi cần thiết.
  2. Tại sao điều này lại tốt hơn? 📌

    • Hiệu Suất Cải Thiện: Chỉ các component cần thiết cho route hiện tại được load và render, giảm thời gian tải ban đầu và cải thiện hiệu suất tổng thể.
    • Trải Nghiệm Người Dùng Mượt Mà Hơn: Việc điều hướng giữa các views khác nhau xảy ra mà không cần tải lại toàn bộ trang, mang lại trải nghiệm người dùng liền mạch và nhanh chóng hơn.

Hiểu về React Router hơn thông qua hệ thống đường cao tốc

image.png

React Router Phép tương tự trong thế giới thực
BrowserRouter 🛣️ Mạng lưới đường bộ cho phép di chuyển. Nếu không có nó, sẽ không có đường.
Routes 🚗 Đường cao tốc có nhiều lối ra (tuyến đường).
Route 🛑 Một lối ra cụ thể dẫn đến một điểm đến (thành phần).
Link 🚦 Biển báo chỉ dẫn người dùng đến các tuyến đường khác nhau.
<Outlet /> 🛣️ Vị trí trên đường cao tốc nơi các lối ra lồng nhau hợp nhất.
  • Không có BrowserRouter, sẽ không có con đường!
  • Không có Routes, sẽ không có các lối ra!
  • Không có Route, bạn không thể đến đích!
  • Không có Outlet, các lối ra lồng nhau không có nơi để hiển thị.

Kết luận

Điều hướng (Routing) là xương sống của việc điều hướng trong các ứng dụng React hiện đại. Nó cho phép chúng ta tạo ra các trải nghiệm đa trang mà không cần tải lại toàn bộ trang, giúp ứng dụng của chúng ta cảm giác nhanh hơn, năng động hơn và giống như ứng dụng gốc.

Với React Router, chúng ta có thể:

  • Dễ dàng ánh xạ các URL vào các component.
  • Kích hoạt điều hướng mượt mà phía client.
  • Tổ chức các ứng dụng lớn thành các cấu trúc route rõ ràng, dễ mở rộng.
  • Cải thiện trải nghiệm người dùng với điều hướng động, layout lồng nhau, các route bảo vệ và điều hướng chương trình.

Khi bạn xây dựng các ứng dụng React phức tạp hơn, việc thành thạo điều hướng sẽ mở ra một cấp độ sức mạnh và tính linh hoạt mới cho các dự án của bạn.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về React Router

React Router là một API cho các ứng dụng React. React router sử dụng định tuyến động phía máy khách cho phép xây dựng SPA (Single Page Application) với điều hướng mà không cần làm mới trang.

0 0 32

- vừa được xem lúc

Xây dựng một Single-page Application cơ bản với React Router DOM như thế nào ?

Mở đầu. Trong những website thông thường khi điều hướng từ page này sang page khác, chúng ta sẽ sử dụng thẻ <a> để làm điều đó, nhưng trong React JS thường được sử dụng để xây dựng nhữmg Single Page A

0 0 231

- vừa được xem lúc

Build React Admin Dashboard with Multiple Themes | React Admin Panel CSS | ReactJS

Build React Admin Dashboard with Multiple Themes | React Admin Panel CSS | ReactJS. . In this video, we will Build React Admin Dashboard with Multiple Themes. .

0 0 207

- vừa được xem lúc

React Ecommerce Web Shop | Part 01 - Homepage | ReactJS SASS

React Ecommerce Web Shop | Part 01 - Homepage | ReactJS SASS. . In this video, we will Build React Ecommerce Web Shop Homepage with SASS. .

0 0 432

- vừa được xem lúc

React Ecommerce Web Shop | Part 02 - Catalog and Product page| ReactJS SASS

React Ecommerce Web Shop | Part 02 - Catalog page and Product page| ReactJS SASS. . In this video, we will Build React Ecommerce Web Shop with SASS. .

0 0 118

- vừa được xem lúc

React Ecommerce Web Shop | Part 03 - Shopping cart | ReactJS SASS

React Ecommerce Web Shop | Part 03 - Shopping cart | ReactJS SASS. . In this video, we will Build React Ecommerce Web Shop with SASS. .

0 0 180