前言

nextjs 的路由部分,之前是 Pages Router。为了适应 react 的新特征,在 nextjs 的 13 版本之后有了一个进化版的 App Router。官方文档也推荐用 App Router的方式开发路由。
nextjs 的路由结构是基于文件系统的路径为路由路径的。

App Router

创建路由

app目录是整个工程的根路径。 app 文件里面的 page.jsx 文件是对应的根路由的页面。嵌套文件夹对应嵌套的路由,比如 app/test 文件夹对应 /test路由。但并不是所有的文件夹都可以当作路由页面的。
只有含有 **page.jsx****route.js**的文件夹才会被渲染成路由页面。

  1. - src
  2. - app
  3. - page.jsx // 响应 / 路由页面
  4. - about
  5. - page.jsx // 响应 /about 路由页面
  6. - login
  7. - page.jsx // 响应 /login 路由页面
  8. - test
  9. - page.jsx // 响应 /login/test 页面

动态路由

前面说了,文件夹的名字就是路由的名字,动态路由的改法就是改变文件夹的命名方式。
如果文件夹名字被命名为 [folder]的形式,就会被当作动态路由。

  1. - src
  2. - app
  3. - page.jsx
  4. - about
  5. - page.jsx
  6. - [test]
  7. - page.jsx // 响应 /about/a 、/about/b、/about/c 等页面

切换路径(客户端)

切换路由的时候,不要使用 a 标签直接切换,会默认刷新页面。需要用特定的方式切换才会让页面不刷新。

  1. Link 标签切换 ```javascript import Link from ‘next/link’

export default function Page() { return Dashboard }

  1. 2. useRouter() Hook
  2. ```javascript
  3. "use client"
  4. import Link from "next/link"
  5. import { useRouter } from "next/navigation"
  6. function AboutPage() {
  7. const router = useRouter()
  8. return (
  9. <>
  10. <div>Welcome to Next.js!</div>
  11. <button onClick={ () => router.push("/") }>点击回到首页</button>
  12. <Link href="/">回到首页</Link>
  13. </>
  14. )
  15. }
  16. export default AboutPage