DEV Community

Cover image for Next.js: A Deep Dive into the Game-Changing React Library
Rakib Hasan
Rakib Hasan

Posted on

Next.js: A Deep Dive into the Game-Changing React Library

If you're a web developer who's interested in creating server-side rendered (SSR) React applications, Next.js is one of the best options you've got. I recently started learning Next.js and wanted to share my first impressions of this powerful framework.

One of the first things that struck me about Next.js If you're a web developer who's interested in building server-side rendered (SSR) React applications, Next.js is a powerful framework that can help streamline your development process. In this post, we'll take a closer look at Next.js and explore some of its key features and benefits.

One of the major advantages of Next.js is its built-in support for SSR. This means that the initial HTML is generated on the server and sent to the client, which can improve performance and SEO. With other frameworks, you may need to set up SSR yourself, which can be a time-consuming process.

Let's take a look at an example of how SSR works in Next.js. Suppose you have a simple React component that fetches some data from an API and displays it on the page:

import { useState, useEffect } from 'react';

function MyComponent() {
  const [data, setData] = useState([]);

  useEffect(() => {
    fetch('/api/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []);

  return (
    <div>
      <h1>My Component</h1>
      <ul>
        {data.map(item => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default MyComponent;

Enter fullscreen mode Exit fullscreen mode

Normally, when you render this component in the browser, the data will be fetched and displayed on the page after the initial HTML has loaded. However, with SSR in Next.js, you can generate the HTML on the server and send it to the client with the data already included. Here's how you can modify the component to support SSR:

import { useState, useEffect } from 'react';

function MyComponent({ data }) {
  const [localData, setLocalData] = useState(data);

  useEffect(() => {
    fetch('/api/data')
      .then(response => response.json())
      .then(data => setLocalData(data));
  }, []);

  return (
    <div>
      <h1>My Component</h1>
      <ul>
        {localData.map(item => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
}

export async function getServerSideProps() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();

  return {
    props: {
      data,
    },
  };
}

export default MyComponent;

Enter fullscreen mode Exit fullscreen mode

In this modified version of the component, we've added a getServerSideProps function that fetches the data from an API and passes it to the component as a prop. We've also modified the useState hook to use the data that's passed in as a prop, and added an additional fetch to update the data on the client side.

With this setup, Next.js will generate the HTML on the server and send it to the client with the data already included. This can help improve the performance of your application, especially if you have a lot of dynamic content that needs to be fetched and rendered.

Another feature of Next.js that I found helpful was its folder-based routing system. This allows you to create routes based on the structure of your project's file system. For example, if you have a file named pages/about.js, it will automatically create a route for /about. This can make it easier to organize your code and create a clear, predictable URL structure.

Here's an example of how folder-based routing works in Next.js:

pages/
--| index.js
--| about/
-----| index.js
-----| team.js

Enter fullscreen mode Exit fullscreen mode

In this example, we have an index.js file in the root pages directory, as well as an about directory that contains two files: an index.js file and a team.js file. With folder-based routing, the index.js file in the root directory corresponds to the root URL (/), while the index.js file in the about directory corresponds to the /about URL. The team.js file in the about directory corresponds to the /about/team URL.

In my experience, getting started with Next.js was relatively straightforward. I used the create-next-app CLI tool to set up a new project, and then began exploring the framework's features. The official Next.js documentation is well-written and provides helpful examples, so I was able to quickly get up to speed.
Here is the official documentation link : Getting Started With Next.js

One drawback of Next.js is that it has a bit of a learning curve, especially if you're new to React or SSR. However, with some patience and persistence, I was able to overcome this hurdle and start building my first Next.js application.

Overall, I would definitely recommend Next.js to other developers who are interested in server-side rendering or building React applications. Its built-in support for SSR and folder-based routing make it a powerful and convenient tool, and its growing community means there are plenty of resources available for learning and troubleshooting.

Top comments (0)