React

[NextJS] Style JSX, Custom App Component( _app 파일), SEO(검색 엔진 최적화) 사용 방법

cob 2022. 10. 14. 14:01

 

 

1. Style JSX

스타일을 꾸미는 방법
import Link from "next/link";
import { useRouter } from "next/router";

export default function NavBar() {
  const router = useRouter();
  return (
    <nav>
      <Link href="/">
        <a className={router.pathname === "/" ? "active" : ""}>Home</a>
      </Link>
      <Link href="/about">
        <a className={router.pathname === "/about" ? "active" : ""}>About</a>
      </Link>
      <style jsx >{`
        a {
          text-decoration: none;
        }
        .active {
          color: tomato;
        }
      `}</style>
    </nav>
  );
}
  • 컴포넌트에 CSS를 적용시켜준다.
   <style jsx global>{`
 	...
      `}</style>
  • global : 모든 컴포넌트에 CSS 적용한다.
    - NextJS는 하나의 큰 앱이 아니라 각각의 나누어진 페이지이기 때문에 하나의 페이지에 작성한 global CSS는 다른 페이지에 영향일 끼칠 수 없지만, 컴포넌트로 하위에 넣게 되면 적용된다. ( _app.tsx에 넣어서 전체 페이지에 적용)

 

 


2. Custom App Component ( 템플릿 커스터마이징 방법 )

2-1) pages 경로에 _app 파일 생성 

NextJS는 렌더링 전_app을 보기 때문에 반드시 해당 이름으로 파일을 만들어주어야한다.

( _app.tsx )

import { AppProps } from "next/app";
import NavBar from "../components/NavBar";
import "../styles/globals.css";
// TypeScript는 AppProps 타입을 준다.
export default function App({ Component, pageProps }: AppProps) {
  return (
    <>
      <NavBar />
      <Component {...pageProps} />
    </>
  );
}
  • Component : 렌더링 하길 원하는 컴포넌트
  • pageProps : 렌더링하길 원하는 컴포넌트의 props

 

 

2-2) Layout 패턴

Custom App Component를 사용할 때 쓰는 layout 패턴이다.
* Source Code *
https://github.com/kangilbin/React.js/blob/master/nextjs-study/pages/_app.tsx

 

( Layout.tsx ) 

import NavBar from "./NavBar";

export default function Layout({ children }: React.PropsWithChildren) {
  return (
    <>
      <NavBar />
      <div>{ children }</div>
    </>
  );
}
  • children : ReactJS가 제공하는 prop으로 하나의 컴포넌트를 또 다른 컴포넌트 안에 넣을 때 쓸 수 있다.
    ( Layout 컴포넌트의 자식 prop들을 가져온다. )

 

(  _app.tsx )

import { AppProps } from "next/app";
import "../styles/globals.css";
import Layout from "./../components/Layout";

export default function App({ Component, pageProps }: AppProps) {
  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  );
}
  • _app파일에는 global로 import 받아야 하는 것들이 많고, 파일 자체에 많은 코드를 원하지 않기 때문에 <Layout /> 컴포넌트 안에 <Component />를 작성한다.

layout 패턴

 

 


3. SEO (검색 엔진) 최적화

네이버나 구글 같은 검색 엔진에 뭔가를 검색했을 때, 내가 만든 사이트가 검색 결과에 더 잘 보이게 하기 위한 과정.
검색 엔진이 내 사이트 내용물(meta tag나 html 등)을 훑어가고 내용물에 특정한 인덱스 같은 것을 만들어 검색 결과에 보여준다. 검색 엔진 최적화는 검색엔진이 내 사이트를 크롤링할 때 정보를 더 잘 가져갈 수 있도록 도와주는 과정이기도 하다.
* Source Code *
https://github.com/kangilbin/React.js/blob/master/nextjs-study/components/Seo.tsx

 

3-1) Head 컴포넌트 생성

( Seo.tsx)

import Head from "next/head";

interface IProps {
  title: string;
}

export default function Seo({ title }: IProps) {
  return (
    <Head>
      <title>{`${title} | Next Movies`}</title>
    </Head>
  );
}

 

3-2) SEO(검색 엔진) 적용

import Seo from "./../components/Seo";

export default function Home() {
  return (
    <div>
      <Seo title="Home" />
      <h1>Home</h1>
    </div>
  );
}

SEO 검색엔진

 

반응형