Menu
CoddyTech

Điều hướng bằng code

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 35 trên 47.

<Link> xử lý việc điều hướng mà người dùng chọn. Nhưng đôi khi ứng dụng tự quyết định: sau khi biểu mẫu được gửi, sau khi đăng nhập thành công, sau khi nhấp vào nút cần thực hiện một số thao tác trước.

Với những trường hợp đó, bạn điều hướng bằng code với useRouter:

'use client';

import { useRouter } from 'next/navigation';

export default function CheckoutButton() {
    const router = useRouter();

    return (
        <button onClick={() => router.push('/thanks')}>
            Check out
        </button>
    );
}

Đối tượng router cung cấp cho bạn:

  • router.push(url): chuyển đến đó và thêm vào lịch sử
  • router.replace(url): chuyển đến đó, thay thế mục hiện tại (không thể quay lại mục đó)
  • router.back(): lùi lại một bước
  • router.refresh(): chạy lại quá trình kết xuất phía máy chủ cho tuyến hiện tại

Có hai quy tắc đáng nhớ. Thứ nhất, useRouter đến từ next/navigation, không phải next/router cũ. Thứ hai, đây là một hook, nên cần có 'use client'.

Khi chỉ cần một liên kết thông thường, hãy dùng liên kết: đó là thẻ <a> thật, nên hoạt động với bàn phím, trình đọc màn hình và thao tác nhấp chuột giữa. Dùng router.push khi việc điều hướng là hệ quả của một việc nào đó, chứ không phải chính việc đó.

challenge icon

Thử thách

Dễ

Nút "Order now" trên trang chủ hiện chưa làm gì. Hãy thêm chức năng điều hướng.

  1. Trong components/OrderButton.jsx, lấy router bằng useRouter().
  2. Khi nhấp, chuyển người dùng đến /menu bằng router.push.

Để nguyên id="order-btn" của nút, vì các bài kiểm tra sẽ nhấp vào nút này.

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>
    );
}
quiz iconTự kiểm tra

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