官网《Next.js —— 用'路由伪装'清理URLs》

本文介绍如何在Next.js中使用路由伪装创建更友好的URL,通过示例展示了如何将查询字符串转换为路径片段,同时保持良好的浏览器历史记录和重新加载页面的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的课程中,我们学习到如何用查询字符创建动态页面。用那种方式,一个博客的请求链接会是这样:

http://localhost:3000/post?title=Hello%20Next.js

但是这个URL看起来不是很友好,你觉得如果像 http://localhost:3000/p/hello-nextjs 这样的链接怎么样?

这很棒对吧?这就是我们要在这节课中要做的。

 

安装

首先,我们需要一个简单的Next.js应用,下载如下应用的例子:

git clone https://github.com/arunoda/learnnextjs-demo.git
cd learnnextjs-demo
git checkout create-dynamic-pages

你可以这样运行它

npm install
npm run dev

现在你可以通过访问 http://localhost:3000/ 来访问这个应用

路由伪装

这里我们将要用Next.js中一个特别的特性,称作“路由伪装”。主要就是它会在杂浏览器中显示一个不同的url,而不是在你所见的应用中真实的路由。

让我们增加一个路由伪装到博客的URL中。

在‘pages/index.js’中使用如下的代码:

import Layout from '../components/MyLayout.js'
import Link from 'next/link'

const PostLink = (props) => (
  <li>
    <Link as={`/p/${props.id}`} href={`/post?title=${props.title}`}>
      <a>{props.title}</a>
    </Link>
  </li>
)

export default () => (
  <Layout>
    <h1>My Blog</h1>
    <ul>
      <PostLink id="hello-nextjs" title="Hello Next.js"/>
      <PostLink id="learn-nextjs" title="Learn Next.js is awesome"/>
      <PostLink id="deploy-nextjs" title="Deploy apps with Zeit"/>
    </ul>
  </Layout>
)

看一下如下的代码块:

const PostLink = (props) => (
  <li>
    <Link as={`/p/${props.id}`} href={`/post?title=${props.title}`}>
      <a>{props.title}</a>
    </Link>
  </li>
)

在'<link>'元素中,我们用了另一个名为‘as’的特性。那就是我们在浏览器中需要展示的。而真正的url则在你的应用中的'href'中。

现在试着去点击第一条博客链接,你就会被导航到那个博客。之后,点击后退按钮,再点击前进按钮,会发生什么?

答案是:会再次导航到那个博客页面。

 

记录历史

正如你所目击的,路由伪装和浏览器的历史浏览记录配合的非常优秀。你所要做的就是添加‘as’属性到链接中。

重新载入

现在进入首页:http://localhost:3000/

然后点击第一条博客的标题,导航到这个博客页面

然后重新加载此页面,发生了什么?

答案是:抛出404错误。

 

404

浏览器给了一个404错误。那是因为在server端根本就没有一个这样的页面,服务端将会下载页面‘p/hello-nextjs’,但是我们只有两个页面,‘index.js’和'post.js'.

由于这个,我们无法再生产环境运行我们的应用,我们需要修复它。

Next.js‘客户端服务API’已经为这个问题提供了解决方案。

我们将会在下一节课中学习如何使用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值