Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

React - Next.js

Introduction to Next.js framework

Next.js is a popular React framework that enables server-side rendering, static site generation, and other powerful features out of the box. It provides a comprehensive solution for building modern web applications with React. This tutorial covers the key concepts and features of Next.js, including its setup, routing, data fetching methods, and more.

Key Points:

  • Next.js is a React framework that supports server-side rendering (SSR) and static site generation (SSG).
  • It provides a file-based routing system, automatic code splitting, and built-in CSS and Sass support.
  • Next.js simplifies data fetching with getStaticProps, getServerSideProps, and getStaticPaths.

Setting Up Next.js

To get started with Next.js, you need to create a new Next.js project. This can be done using the create-next-app command, which sets up everything you need to start developing your application.


// Create a new Next.js project
npx create-next-app my-next-app

// Navigate to the project directory
cd my-next-app

// Start the development server
npm run dev
                

File-Based Routing

Next.js uses a file-based routing system. Each file in the pages directory corresponds to a route in your application. The filename determines the route's path.


// pages/index.js
import React from 'react';

const HomePage = () => {
    return (
        <div>
            <h1>Welcome to My Next.js App</h1>
        </div>
    );
};

export default HomePage;

// pages/about.js
import React from 'react';

const AboutPage = () => {
    return (
        <div>
            <h1>About Us</h1>
        </div>
    );
};

export default AboutPage;
                

Data Fetching Methods

Next.js provides several data fetching methods to fetch data for your pages:

  • getStaticProps: Fetches data at build time for static generation.
  • getServerSideProps: Fetches data on each request for server-side rendering.
  • getStaticPaths: Defines dynamic routes to be pre-rendered based on data.

// pages/blog.js
import React from 'react';

const BlogPage = ({ posts }) => {
    return (
        <div>
            <h1>Blog</h1>
            <ul>
                {posts.map(post => (
                    <li key={post.id}>{post.title}</li>
                ))}
            </ul>
        </div>
    );
};

export async function getStaticProps() {
    const res = await fetch('https://jsonplaceholder.typicode.com/posts');
    const posts = await res.json();
    return {
        props: {
            posts,
        },
    };
}

export default BlogPage;

// pages/posts/[id].js
import React from 'react';

const PostPage = ({ post }) => {
    return (
        <div>
            <h1>{post.title}</h1>
            <p>{post.body}</p>
        </div>
    );
};

export async function getStaticPaths() {
    const res = await fetch('https://jsonplaceholder.typicode.com/posts');
    const posts = await res.json();
    const paths = posts.map(post => ({
        params: { id: post.id.toString() },
    }));
    return { paths, fallback: false };
}

export async function getStaticProps({ params }) {
    const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
    const post = await res.json();
    return {
        props: {
            post,
        },
    };
}

export default PostPage;
                

API Routes

Next.js allows you to create API routes to handle backend logic. These routes are defined in the pages/api directory and provide a simple way to create serverless functions.


// pages/api/hello.js
export default function handler(req, res) {
    res.status(200).json({ message: 'Hello, world!' });
}
                

Built-In CSS and Sass Support

Next.js has built-in support for importing CSS and Sass files directly into your components, making it easy to style your application.


// pages/_app.js
import '../styles/global.css';

export default function MyApp({ Component, pageProps }) {
    return <Component {...pageProps} />;
}

// styles/global.css
body {
    font-family: Arial, sans-serif;
    background-color: #f4f4f4;
    margin: 0;
    padding: 0;
}
                

Best Practices

Here are some best practices for using Next.js in your React applications:

  • Use file-based routing for a simple and intuitive routing setup.
  • Leverage Next.js data fetching methods to optimize your application's performance.
  • Take advantage of built-in CSS and Sass support for styling your components.
  • Use API routes to handle backend logic and create serverless functions.
  • Utilize Next.js plugins and configuration options to extend your application's functionality.

Summary

In this tutorial, you learned about the Next.js framework, which provides a powerful solution for building modern web applications with React. Next.js supports server-side rendering (SSR) and static site generation (SSG) out of the box, offers a file-based routing system, and includes built-in support for CSS and Sass. By leveraging Next.js features and following best practices, you can build efficient and scalable React applications.