Understand static and dynamic Page Routing in Next.js

Xiaoru Li
InstructorXiaoru Li
Share this video with your friends

Social Share Links

Send Tweet
Published 4 years ago
Updated 3 years ago

Next.js uses a file-system based router, meaning that it treats single-file components in the /pages/ directory as pages. In this lesson, we will set up multiple pages and use next/link to navigate across different routes, and see how to create dynamic routes, and parse URL query strings.

We will be using TypeScript, but for this specific lesson, no changes need to be made if you are using JavaScript.

Instructor: [0:00] Let's create a new About page by creating a file, about.tsx, in the pages directory. After saving this file, our About page can be visited by going to localhost:3000/about in a browser.

[0:21] Next.js has excellent support for client-side routing. Let's create a link on the Index page to the About page by using the nextLink component. Then we pass the destination route to the href prop. Inside the link, we can have some text. Then we can do the same thing in the About page.

[0:48] Let's have a look in the browser. The index files will always be mapped to the root of the directory they are in. For example, let's create an about directory. Move the about.tsx file into it and rename it to index.tsx.

[1:08] We can also create nested routes by simply creating files inside nested directories. Let's create a new file, me.tsx, and link it to the About page. As we can see, everything works in the browser.

[1:32] Next.js allows us to create dynamic routes as well. Let's create a user directory and a [id] .tsx file in it. Inside this page, we'll create a page component called User, with some text. When the browser hits an arbitrary sub-route under the User route, this [id] page will be served.

[1:58] Now we'd like to access and parse the URL itself so we can render content dynamically. Let's do this by importing the useRouter hook from the next/router module. Then, in our page component, fetch the router objects using the hook and grab the parsed ID string from Router.Query.

[2:21] Notice that the name of this variable should match the text we put in the brackets in a filename. We can also pass additional parameters using the { url: { query: string. The parameters will also be parsed and put into the Router.Query object.

[2:43] Now, let's test this in the browser with an URL url/123a, then the query string, action = create, and DarkMode = false. Now we can see the query string is parsed by Next.js, and we can render dynamic contents based on what we have here.

egghead
egghead
~ 5 minutes ago

Member comments are a way for members to communicate, interact, and ask questions about a lesson.

The instructor or someone from the community might respond to your question Here are a few basic guidelines to commenting on egghead.io

Be on-Topic

Comments are for discussing a lesson. If you're having a general issue with the website functionality, please contact us at support@egghead.io.

Avoid meta-discussion

  • This was great!
  • This was horrible!
  • I didn't like this because it didn't match my skill level.
  • +1 It will likely be deleted as spam.

Code Problems?

Should be accompanied by code! Codesandbox or Stackblitz provide a way to share code and discuss it in context

Details and Context

Vague question? Vague answer. Any details and context you can provide will lure more interesting answers!

Markdown supported.
Become a member to join the discussionEnroll Today