Menu
CoddyTech

编程式路由

本课属于 Coddy React 学习旅程的“Next.js 基础”单元。第 35 课,共 47 课。

<Link> 用于处理用户主动选择的导航。但有时由应用来决定:表单提交后、登录成功后,或者点击按钮并完成相应操作后。

对于这些情况,你可以使用 useRouter 从代码中导航:

'use client';

import { useRouter } from 'next/navigation';

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

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

路由器对象提供以下功能:

  • router.push(url):前往该页面,并将其添加到历史记录中
  • router.replace(url):前往该页面,并替换当前记录(无法返回到该记录)
  • router.back():后退一步
  • router.refresh():重新运行当前路由的服务器渲染

有两条规则值得记住。第一,useRouter 来自 next/navigation,而不是旧的 next/router。第二,它是一个 Hook,所以需要 'use client'。

当普通链接就能满足需求时,就使用链接:它是真正的 <a>,因此可以通过键盘、屏幕阅读器和鼠标中键点击来使用。当导航是某件事的结果,而不是事情本身时,再使用 router.push。

challenge icon

挑战

简单

首页上的“Order now”按钮不起作用。让它实现页面跳转。

  1. 在 components/OrderButton.jsx 中,使用 useRouter() 获取路由器。
  2. 点击时,使用 router.push 将用户带到 /menu。

不要改动按钮的 id="order-btn":测试会点击它。

亲手试试

import './globals.css';

export const metadata = {
    title: 'My App',
};

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

Next.js 基础中的所有课