Next.js 13의 새로운 기능인 'app Directory' 환경에서 Material UI (이하 MUI)를 적용하는 방법을 정리 합니다.
특별히 어려운 부분은 없고, 기록 차원에서 정리 하고자 합니다.
$ npx create-next-app@latest --experimental-app
$ yarn add @mui/material @emotion/react @emotion/styled
// app/globals.css
@import url('https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap');
@import url('https://fonts.googleapis.com/icon?family=Material+Icons');
...
구글 Roboto폰트와 Meterial Icon을 설정 합니다.
MUI 테마 파일 생성
//
// app/theme.js
//
import { createTheme } from '@mui/material/styles';
// Create a theme instance.
const theme = createTheme({
palette: {
mode: "light",
},
});
export default theme;
테마를 설정 합니다.
정의되어있지 않은 custom variables을 추가하여 사용할 경우, 타입스크립트(.ts)는 인터페이스를 다시 정의 해 주어야 해서 복잡합니다. 테마 만큼은 자바스크립트(.js)를 추천 합니다.
layout.tsx 수정
//
// app/layout.tsx
//
'use client';
import './globals.css';
import theme from './theme';
import CssBaseline from '@mui/material/CssBaseline';
import { ThemeProvider } from '@mui/material/styles';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<head />
<ThemeProvider theme={theme}>
<CssBaseline />
<body>{children}</body>
</ThemeProvider>
</html>
);
}
MUI의 공식 Github(Next.js 샘플)에는 emotion cache server와 client 설정 부분이 있는데, (SSR 지원 등) 이부분은 맞지 않는것 같아 모두 삭제 하였습니다. 이 부분은, 앞으로 app Directory를 위한 새로운 가이드가 나오지 않을까 생각 됩니다.
MUI의 UI 콤포넌트는 대부분 client component로 코딩 되어있는것 같습니다. 아직까지는 MUI사용을 위해 "use client" 를 소스코드 최상단에 추가하여야 합니다.
조금씩 사용하면서 내용을 수정 보완 하도록 하겠습니다.
혹시 SEO 부분에서 손해가 생기진 않을까요?