오늘은 Next.js 의 기본적인 기능들에 대해 알아볼 것
export default
해주어야한다.<Link>
태그를 사용해야한다.// -Nav.js
export default function Home() {
return (
<Link href="/" legacyBehavior >
<a>Home</a>
</Link>
<Link href="/about" legacyBehavior >
<a>About</a>
</Link>
)
}
Link
태그 안에 a
태그를 쓰려면 legacyBehavior
prop 을 꼭 추가해야한다. (참고)a
태그에 속성을 부여할 수 있다.userRouter()
훅을 사용할 수 있습니다.// -Nav.js
export default function Home() {
const router = useRouter();
return (
<Link href="/" legacyBehavior >
<a style={{ color: router.pathname === "/" ? "red" : "blue" }}>Home</a>
</Link>
<Link href="/about" legacyBehavior >
<a style={{ color: router.pathname === "/about" ? "red" : "blue" }}>About</a>
</Link>
)
}
"/"
에 있을때 Home 글자가 빨간색으로 변하고, 아닌 경우에는 파란색으로 변한다.pathname
값을 가져와서 라우터에 훅을 건 것이다..nav
클래스 이름을 사용해도된다!// -Nav.module.css
.nav {
background-color : tomato;
}
// -Nav.js
import styles from "./Nav.module.css"
export default function Home() {
const router = useRouter();
return (
<nav className={styles.nav}> <<<----
<Link href="/" legacyBehavior >
<a>Home</a>
</Link>
<Link href="/about" legacyBehavior >
<a>About</a>
</Link>
</nav>
)
}
// -Nav.js
import styles from "./Nav.module.css"
export default function Home() {
const router = useRouter();
return (
<nav className={`${styles.nav}${styles.navtwo}`}> <<<----
<Link href="/" legacyBehavior >
<a>Home</a>
</Link>
<Link href="/about" legacyBehavior >
<a>About</a>
</Link>
</nav>
)
}
style jsx
를 사용함으로 컴포넌트 내부에 해당 컴포넌트만 스코프를 가지는 css를 만들수 있다.// -Nav.js
export default function Home() {
const router = useRouter();
return (
<nav>
<Link href="/" legacyBehavior >
<a>Home</a>
</Link>
<Link href="/about" legacyBehavior >
<a>About</a>
</Link>
<style jsx>{` <<<----
nav {
background-color : tomato;
}
a {
text-decoration : none;
}
`}</style>
</nav>
)
}
<nav jsx-랜덤텍스트...>
로 이루어진다.// -Nav.js
export default function Home() {
const router = useRouter();
return (
<nav>
<Link href="/" legacyBehavior >
<a className={router.pathname === "/" ? "active" : "" }>Home</a> <<<----
</Link>
<Link href="/about" legacyBehavior >
<a>About</a>
</Link>
<style jsx>{` <<<----
nav {
background-color : tomato;
}
a {
text-decoration : none;
}
.active { <<<----
color : blue;
}
`}</style>
</nav>
)
}
<style jsx global>
를 사용하면 글로벌로 스타일 정의가 가능하다._app.tsx
에서만 정의가 가능하다.// _app.tsx
import "./globals.css";
function MyApp({ Component, pageProps }) {
return (
<>
<NavBar />
<Component ponent {...pageProps} />
<style jsx global>{` <<<-----
a {
color : white;
}
`}</style>
</>
)
}
_app.tsx
를 실행한다.(참고)_app.tsx
아닐 경우 _app.js
// _app.tsx 일 경우
import type { AppProps } from "next/app";
function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />;
}
export default MyApp;
// _app.js 일 경우
function MyApp({ Component, pageProps } {
return <Component {...pageProps} />;
}
export default MyApp;
Component
, pageProps
를 받는데,Component
는 요청한 페이지다./about
요청을 보냈다면 Component
에는 /pages/about.js
파일이 props로 내려오게 된다.// _app.tsx
function MyApp({ about, pageProps }) {
return <about {...pageProps} />;
}
import
만 해주면 바로 사용할 수 있다.<Head>
태그안에 <title>
태그를 사용해서 타이틀을 적어주면 바로 적용된다!import Head from 'next/head'
function IndexPage() {
return (
<div>
<Head>
<title>title</title>
</Head>
<p>Hello world!</p>
</div>
)
}
// Head title 전용 컴포넌트
// Seo.tsx
interface Iprops {
title: string;
}
export default function Seo({ title }: Iprops) {
return (
<Head>
<title>{title} | Next Movies</title>
</Head>
);
}
// about.tsx
import Seo from "./components/Seo";
export default function about() {
return (
<div>
<Seo title="About" /> <<<----
<h2>About ~~</h2>
</div>
);
}