MDB React & Next.js integration
How to use React with Next.js - free starter
MDB React integration with Next.js. Installation, various examples of implementation and much more.
Lets see how to integrate Next.js with MDB 5 across our layout, components, and utilities.
Creating Next.js app
Prerequisites
Before starting the project make sure to install Node LTS (14.6.x or higher).
Create a new Next.js app and navigate to its directory
npx create-next-app@latest
cd my-app
MDB installation
Step 1
Install MDB and Font Awesome
npm i mdb-react-ui-kit
npm i @fortawesome/fontawesome-free
Step 2
CSS import
Add these lines in app/layout.tsx file.
import 'mdb-react-ui-kit/dist/css/mdb.min.css'
import "@fortawesome/fontawesome-free/css/all.min.css"
Roboto font (optional)
Copy the code from this snippet to change font:
import 'mdb-react-ui-kit/dist/css/mdb.min.css'
import "@fortawesome/fontawesome-free/css/all.min.css"
import { Roboto } from "next/font/google";
const roboto = Roboto({ weight: "400", subsets: ["latin"] });
export const metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body className={roboto.className}>{children}</body>
</html>
);
}
Step 3
Launch your app.
npm run dev
Prerequisites
Before starting the project make sure to install Node LTS (14.6.x or higher).
Create a new Next.js app and navigate to its directory
npx create-next-app@latest
cd my-app
MDB installation
Step 1
Install MDB and Font Awesome
npm i mdb-react-ui-kit
Install Font Awesome.
CSS import
Add these lines in pages/_app.js file.
import 'mdb-react-ui-kit/dist/css/mdb.min.css'
import "@fortawesome/fontawesome-free/css/all.min.css"
Roboto font (optional)
Create a custom pages/_document.js and import Roboto font in the head
section.
You can read more about Document in the official Next.js documentation.
import { Html, Head, Main, NextScript } from 'next/document'
export default function Document() {
return (
<Html>
<Head>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
)
}
Set font family globally in styles/globals.css as in the example:
body {
font-family: Roboto, Helvetica, Arial, sans-serif;
}
Step 2
Launch your app.
npm run dev
Usage
To use MDB React inside your Next.js app simply navigate to app/page.tsx or pages/index.js and try the following example.
import React from 'react';
import { MDBCarousel, MDBCarouselItem, MDBCarouselCaption } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBCarousel showIndicators showControls fade>
<MDBCarouselItem itemId={1}>
<img src='https://mdbootstrap.com/img/Photos/Slides/img%20(15).jpg' className='d-block w-100' alt='...' />
<MDBCarouselCaption>
<h5>First slide label</h5>
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
</MDBCarouselCaption>
</MDBCarouselItem>
<MDBCarouselItem itemId={2}>
<img src='https://mdbootstrap.com/img/Photos/Slides/img%20(22).jpg' className='d-block w-100' alt='...' />
<MDBCarouselCaption>
<h5>Second slide label</h5>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</MDBCarouselCaption>
</MDBCarouselItem>
<MDBCarouselItem itemId={3}>
<img src='https://mdbootstrap.com/img/Photos/Slides/img%20(23).jpg' className='d-block w-100' alt='...' />
<MDBCarouselCaption>
<h5>Third slide label</h5>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
</MDBCarouselCaption>
</MDBCarouselItem>
</MDBCarousel>
);
}
Troubleshooting
When using a component which refers to window
, document
or any object
undefined on the server side, this error may show up:
ReferenceError: window is not defined
The solution is to use our MDBClientOnly
component, or a dynamic import with SSR disabled for problematic components.
import { MDBClientOnly, MDBModal } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBClientOnly>
<MDBModal open={true}>
<MDBModalDialog>
<MDBModalContent>
<MDBModalHeader>
<MDBModalTitle>Modal title</MDBModalTitle>
<MDBBtn className='btn-close' color='none' onClick={toggleOpen}></MDBBtn>
</MDBModalHeader>
<MDBModalBody>...</MDBModalBody>
<MDBModalFooter>
<MDBBtn color='secondary' onClick={toggleOpen}>
Close
</MDBBtn>
<MDBBtn>Save changes</MDBBtn>
</MDBModalFooter>
</MDBModalContent>
</MDBModalDialog>
</MDBModal>
</MDBClientOnly>
)
}
import dynamic from 'next/dynamic'
const MDBModal = dynamic(() => import('mdb-react-ui-kit').then((mod) => mod.MDBModal), { ssr: false })