提问人:Lord_Sarcastic 提问时间:11/17/2023 更新时间:11/17/2023 访问量:34
启动动态路由@
Start a dynamic route with @
问:
在我的NextJS应用程序(我使用页面路由器)中,我在文件夹中有一个名为 - 类似于YouTube的用户配置文件链接的文件。但是,访问显示 404 页面。如何使用页面路由器在NextJS上允许用户配置文件页面的格式?@[username].tsx
pages
/@lordsarcastic
@[username]
答:
1赞
Fabio Nettis
11/17/2023
#1
您可以使用客户端文件来实现您的目标。首先,您需要在项目中创建以下结构。template.(js|ts)
app/
├─ [username]/
│ ├─ page.js
│ ├─ template.js
我们之所以使用模板,是因为它们类似于布局,因为它包装了每个子布局或页面,但与跨路由维护状态的布局不同,模板在导航时为每个子布局创建一个新实例。在文件模板中,您可以执行如下操作:
"use client";
import { useParams, useRouter } from "next/navigation";
// templates are server components by default but do not receive any
// params, henceforth we need to rely on hooks on the client side.
export default function UserTemplate({ children }) {
const router = useRouter();
const { username } = useParams();
if (!username?.startsWith("@")) {
router.replace("/");
}
return <>{children}</>;
}
这只会在客户端呈现您的布局,并且您的页面、子页面和页面内的后续组件仍将是服务器组件,因为客户端组件可以将服务器组件作为子组件接收。此设置可防止对嵌套路由重复这些检查。
评论
0赞
Lord_Sarcastic
11/18/2023
谢谢你。但是,我使用的是页面目录而不是应用程序目录。这如何适用?
0赞
Fabio Nettis
11/19/2023
@Lord_Sarcastic 可悲的是,这将更难在页面目录中复制。
评论