next.js 学习笔记(routing)

Aug 7, 20244 min read

这篇Blog主要是记录我学习next.js的过程,以及一些重要的知识点。

Routing(路由, 以下内容都是app router)

Defining Routes(定义路由)

Next.js的路由是基于文件系统的, 只要在目录下有个page.(js|jsx|tsx)文件,那么这个目录名就会成为一个可访问的路由地址。

Pages and Layouts(页面和布局)

Pages

page.(js|jsx|tsx)文件可以让路由变成public access。默认情况下page.(js|jsx|tsx)的组件都是server components

Layouts

Layout.(js|jsx|tsx)文件可以做到让布局在多个路由中共享。Layout组件会接受一个Children属性,这个属性就是当前路由的内容。

Root Layout(Required)
  • app目录下必须要有一个layout.(js|jsx|tsx)文件,这个文件是整个app的根布局。同时在该layout文件中,需要有htmlbody标签。
  • 其他的嵌套layout文件不允许有htmlbody标签。
  • layout默认是server components。 没有办法在 parent layout 和 child layout 之间传递数据。

Templates

Template.(js|jsx|tsx) 文件和 Layout 文件的区别是在路由导航的时候, Template 实例会重新创建,而 layout 不会

Metadata

Metadata可以通过在page.js或者layout.js导出metadata对象来定义,或者通过generateMetadata函数来动态生成。

TSX

Linking and Navigation

Link组件

这是主要并且推荐的一种路由跳转方式, 提供了prefetching的功能

TSX

如果想要知道当前的路由可以通过usePathname hook来获取

TSX

useRouter() hook

useRouter hook 允许通过编程的方式在Client Components进行路由跳转

TSX

redirect function

server components中可以通过redirect函数来进行路由跳转。不能在事件处理函数中使用redirect函数。

Error Handling

Using Error Boundaries

通过添加error.tsx文件可以处理子组件的错误, 当子组件发生错误的时候,error.tsx会被渲染。

TSX

Handling Global Errors

app/global-error.tsx文件中可以处理全局错误。注意需要有htmlbody标签。

Loading UI and Streaming

instant loading

loading.js通过React Suspense帮助创建一个有用的loading UI。当路由导航的时候,loading.js会被渲染。 实际上loading.js是一个包裹了page.jsReact Suspense组件的fallback。

Streaming

Routing: Loading UI and Streaming | Next.jsBuilt on top of Suspense, Loading UI allows you to create a fallback for specific route segments, and automatically stream content as it becomes ready.
og

Redirecting

浏览量

最后修改于

Aug 7, 2024
Made withbyFan Chen