Front-End/Next

[Next.js] Next.js 주요 기능

시니철 2024. 11. 20. 13:44

<Link> 컴포넌트

`<Link>`는 Next.js에서 페이지 간의 빠르고 부드러운 전환을 제공하는 컴포넌트입니다.

HTML의 `<a>` 태그를 대신 사용하며, 페이지 전체를 새로고침하지 않도록 최적화합니다.

import Link from 'next/link';

export default function Page() {
  return <Link href="/">홈페이지로 이동</Link>;
}

useRouter Hook

`useRouter`를 통해 URl 쿼리와 페이지 전환을 제어할 수 있습니다.


1) 쿼리 값 가져오기

Params 값 : 파일명 `[id].js`에 따라 동적으로 URL의 값을 참조합니다.

import { useRouter } from 'next/router';

export default function Product() {
  const router = useRouter();
  const id = router.query['id'];

  return <>Product #{id} 페이지</>;
}

 

쿼리스트링 값 : `/search?q=티셔츠`와 같은 URL에서 `q` 값을 참조합니다.

import { useRouter } from 'next/router';

export default function Search() {
  const router = useRouter();
  const q = router.query['q'];

  return <>{q} 검색 결과</>;
}

2) 페이지 이동

`router.push()`로 코드에서 페이지를 이동시킬 수 있습니다.

import { useState } from 'react';
import { useRouter } from 'next/router';

export default function SearchForm() {
  const [value, setValue] = useState('');
  const router = useRouter();

  const handleSubmit = (e) => {
    e.preventDefault();
    router.push(value ? `/search?q=${value}` : '/');
  };

  return (
    <form onSubmit={handleSubmit}>
      <input value={value} onChange={(e) => setValue(e.target.value)} />
      <button>검색</button>
    </form>
  );
}

리다이렉트

`next.config.js`에서 리다이렉트를 설정하여 특정 URL을 다른 URL로 자동 이동시킬 수 있습니다.

/** @type {import('next').NextConfig} */
const nextConfig = {
  async redirects() {
    return [
      {
        source: '/products/:id',
        destination: '/items/:id',
        permanent: true,
        // true: 308 Permanent Redirect, false: 307 Temporary Redirect
      },
    ];
  },
};

module.exports = nextConfig;

커스텀 404 페이지

사용자가 존재하지 않는 페이지에 접근하면 기본 404 페이지 대신 커스텀 페이지를 보여줄 수 있습니다.

`pages/404.js`를 만들어서 구현합니다.

export default function Custom404() {
  return <h1>페이지를 찾을 수 없습니다</h1>;
}

커스텀 App

사이트 전반에 적용할 공통 로직, 컴포넌트, 컨텍스트 등을 설정하려면 `pages/_app.js`를 수정합니다.

예: 전역 CSS 적용, 공통 헤더 추가

import Header from '@/components/Header';
import { ThemeProvider } from '@/lib/ThemeContext';
import '@/styles/globals.css';

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

커스텀 Document

HTML 코드의 구조를 수정하려면 `/pages/_document.js`를 사용합니다.

브라우저에서 실행되는 함수(useEffect 등)는 사용할 수 없습니다.

import { Html, Head, Main, NextScript } from 'next/document';

export default function Document() {
  return (
    <Html lang="ko">
      <Head />
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}

'Front-End > Next' 카테고리의 다른 글

[Next.js] Image 태그  (0) 2024.11.25