NextJS에서는 <img>
요소의 개선버전으로 next/image
를 제공합니다.
개선된 사항은 다음과 같습니다. (Next 13버전 기준)
import Image from 'next/image'
import profilePic from '../public/me.png'
function Home() {
return (
<>
<h1>My Homepage</h1>
<Image
src={profilePic}
alt="Picture of the author"
// width={500} 기본값은 auto
// height={500} 기본값은 auto
// blurDataURL="data:..."
// placeholder="blur" // 완전히 로드 될 때까지 블러 여부
/>
<p>Welcome to my homepage!</p>
</>
)
}
import Image from 'next/image'
export default function Home() {
return (
<>
<h1>My Homepage</h1>
<Image
src="/me.png"
alt="Picture of the author"
width={500}
height={500} //로컬이미지가 아닌 경우엔 width, height를 명시해야 합니다.
/>
<p>Welcome to my homepage!</p>
</>
)
}
NextJS에서는 13버전 부터 새로운 폰트 시스템을 제공합니다.
📝 size-adjust 폰트마다 같은 크기값이라도 실제 크기가 다른데
폰트의 실제 크기를 지정한 크기값에 맞춰주는 기능을 뜻합니다.
구글폰트에 존재하는 모든 폰트를 지원하기 때문에 브라우저에 요청을 보낼 필요없이 정적 자원으로 활용이 가능합니다.
import { Inter } from '@next/font/google';
const inter = Inter({ subsets: ['latin'] });
<html className={inter.className}>
다음과 같이 커스텀 폰트 또한 지원하며 캐싱, preoading을 지원합니다.
import localFont from '@next/font/local';
const myFont = localFont({ src: './my-font.woff2' });
<html className={myFont.className}>
NextJS는 루트 디렉토리에 있는 public
폴더 아래의 모든 요소는 정적파일로써 사용이 가능합니다. 기본 URL은 /
입니다.
import Image from 'next/image'
function Avatar() {
return <Image src="/me.png" alt="me" width="64" height="64" />
}
export default Avatar
NextJS에는 Script로드시 next/script
를 사용합니다.
//pages/dashborad.tsx
import Script from 'next/script'
export default function Dashboard() {
return (
<>
<Script src="https://example.com/script.js" />
</>
)
}
특정 페이지가 로드 될 때만 스크립트를 가져와 실행합니다.
모든 페이지에서 사용 되는 스크립트를 로드 할려면 다음과 같이 App
에서 처리합니다.
import Script from 'next/script'
export default function MyApp({ Component, pageProps }) {
return (
<>
<Script src="https://example.com/script.js" />
<Component {...pageProps} />
</>
)
}
사용자가 여러 페이지를 탐색하더라도 스크립트가 한 번만 로드 되도록 합니다.