Table of Contents
Material-UI (MUI) is a popular React UI framework that provides a robust and customizable component library based on Google’s Material Design guidelines. Next.js is a React framework for building server-side rendered (SSR) and static web applications. Combining these two powerful tools can lead to the creation of efficient, attractive, and highly performant web applications. This guide will walk you through the steps to integrate Material-UI with Next.js.
Prerequisites
Before we start, make sure you have the following installed:
- Node.js
- npm or yarn
Steps for Using Material-UI with Next.js
Step 1: Setting Up a Next.js Project
First, create a new Next.js project. You can do this using the following command:
npx create-next-app my-material-ui-app # or yarn create next-app my-material-ui-app
Navigate to the project directory:
cd my-material-ui-app
Step 2: Installing Material-UI
Next, install Material-UI and its dependencies:
npm install @mui/material @emotion/react @emotion/styled # or yarn add @mui/material @emotion/react @emotion/styled
Step 3: Setting Up the Theme Provider
Material-UI uses a theme provider to inject styles into the application. Create a theme configuration and wrap your application with the ThemeProvider.
Create a new file src/theme.js
// src/theme.js import { createTheme } from '@mui/material/styles'; const theme = createTheme({ palette: { primary: { main: '#1976d2', }, secondary: { main: '#dc004e', }, }, }); export default theme;
Modify pages/_app.js to include the theme provider
// pages/_app.js import * as React from 'react'; import PropTypes from 'prop-types'; import Head from 'next/head'; import { ThemeProvider } from '@mui/material/styles'; import CssBaseline from '@mui/material/CssBaseline'; import theme from '../src/theme'; export default function MyApp(props) { const { Component, pageProps } = props; React.useEffect(() => { // Remove the server-side injected CSS. const jssStyles = document.querySelector('#jss-server-side'); if (jssStyles) { jssStyles.parentElement.removeChild(jssStyles); } }, []); return ( <React.Fragment> <Head> <title>My Material-UI App</title> <meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" /> </Head> <ThemeProvider theme={theme}> <CssBaseline /> <Component {...pageProps} /> </ThemeProvider> </React.Fragment> ); } MyApp.propTypes = { Component: PropTypes.elementType.isRequired, pageProps: PropTypes.object.isRequired, };
Step 4: Adding Material-UI Components
Now you can start using Material-UI components in your Next.js application. For example, let’s create a simple homepage with a Material-UI AppBar and a Button.
Modify pages/index.js
// pages/index.js import * as React from 'react'; import { Button, Container, Typography, AppBar, Toolbar } from '@mui/material'; export default function Home() { return ( <React.Fragment> <AppBar position="static"> <Toolbar> <Typography variant="h6" component="div" sx={{ flexGrow: 1 }}> My Material-UI App </Typography> </Toolbar> </AppBar> <Container> <Typography variant="h2" component="h1" gutterBottom> Welcome to My Material-UI App </Typography> <Button variant="contained" color="primary"> Get Started </Button> </Container> </React.Fragment> ); }
Step 5: Customizing the Theme
Material-UI allows you to customize the theme to match your brand. You can extend the theme configuration in src/theme.js:
// src/theme.js import { createTheme } from '@mui/material/styles'; const theme = createTheme({ palette: { primary: { main: '#1976d2', }, secondary: { main: '#dc004e', }, background: { default: '#f5f5f5', }, }, typography: { fontFamily: 'Roboto, Arial, sans-serif', }, }); export default theme;
Conclusion
In this guide, we walked through the process of integrating Material-UI with Next.js, from setting up the project to adding and customizing components. With this setup, you can build beautiful, responsive, and efficient web applications using the powerful combination of Material-UI and Next.js.
For more updates on programming trends and tutorials, visit blogsea.net regularly.
Using Material-UI with Next.js – FAQs
Material-UI is a React UI framework based on Google’s Material Design.
Run npm install @mui/material @emotion/react @emotion/styled
or yarn add @mui/material @emotion/react @emotion/styled.
A Theme Provider injects the theme configuration into the application.
Yes, you can use Material-UI themes with styled-components by integrating ThemeProvider.
Use the sx prop, styled components, or the makeStyles hook.