DEV Community

Violeta
Violeta

Posted on

Using Next.js Router

Next.js is a React framework that helps us build applications in a faster and easier way, offers make building large scale production ready React applications easier, leaving aside the part of the initial configuration since all that configuration comes by default.

In a typicall React application you need to add extra libraries to add some features like routing, authentication, etc. Next.js provides these features and you don't have to add as many third party libraries to solve common problems

To create a new Next.js project use:

npx create-next-app
Enter fullscreen mode Exit fullscreen mode
How use Next.js Routing

In a traditional React app (not using Next.js) we configure routing based on code, for example:

<Router>  
      <Switch>
          <Route path="/" exact component={App}/>
          <Route path="/detail" exact component={Detail}/>
          <Route path="/admin" exact component={AdminMain}/>
        </Switch>     
</Router>
Enter fullscreen mode Exit fullscreen mode

In this example, you specify the path and the component you want to show in that path, your components can be in any folder in your source, there is no specific way to organize the components within the code.

Next.js provide us with a more natural file base routing, you just need to follow some guidelines and then Next.js will infer the routes.

First you need a special folder named pages

Then, you organize your React components in a folder structure inside your pages folder according to your needs, for example, if we have the components and folder structure:

Alt Text

The index.js from pages will be our main page (for example: mypage.com)

The about.js from pages will be displayed when you access to mypage.com/about

For clients folder:

Alt Text

The index.js from pages/clients will be the page for mypage.com/clients

In Next.js you can add brackets to a page ([param]) to create a dynamic route, in this case the [clientid].js is the page for a specific client like mypage.com/clients/clientABC,

You can also catch all paths by adding three dots inside the brackets like in pages/clients/[...others].js, in this case Next will search for a path that satisfy this structure, something like mypage.com/clients/clientABC will match with pages/clientes/[clientid].js but mypage.com/clients/search/clientABC will match with pages/clients/[...others].js

To get access to the URL values in code Next.js provide a hook we can use, we need to import:

import { useRouter } from 'next/router';
Enter fullscreen mode Exit fullscreen mode

useRouter give us various methods and data propierties we can use, for example: pathname provides the path of the component showed in the screen, query gives access to the value we get on a specific path

In our code we usually have to navigate to a page through a Link or an action triggered by a button, if you need a link Next.js have a Link component

import Link from 'next/link';
Enter fullscreen mode Exit fullscreen mode

With Link you can use href property to specify the path which you want to navigate

<Link href="/clients">Client List</Link>
//or
<Link href={`/clients/${clientId}`} >{clientName}</Link>
Enter fullscreen mode Exit fullscreen mode

or you can provide an object to href where you specify some values that next.js is expecting like pathname and query which is an object with the value you want to pass, in this case, clientId

<Link href={{
     pathname: '/clients/[clientId]',
     query: {clientId: client.id}
}} >{clientName}</Link>
Enter fullscreen mode Exit fullscreen mode

If you use a button you can use router.push, with this you can specify the route:

function onClickHandler(){
   router.push('/clients');
}
Enter fullscreen mode Exit fullscreen mode

or you can pass and object :

function onClickHandler(){
   router.push({
      pathname:'/clients/[clientId]',
      query: {clientId: client.id}
   });
}
Enter fullscreen mode Exit fullscreen mode

Next.js also give us an easy way to manage a 404 page, you just need to add a file on your root pages folder and this file has to be named 404.js and Next.js always will render the component in this file when a 404 error occur.

Top comments (0)