티스토리 뷰

공부를 진행하기 앞서 css module 에서 작성한 스타일링 코드는 모두 지워줍니다.

정리한 코드는 다음과 같습니다.

import Link from "next/link";
import { useRouter } from "next/router";
export default function NavBar(){
    const router = useRouter();
    return (
        <nav className={styles.nav}>
            <Link href="/">
                <a>Home</a>
            </Link>
            <Link href="/about">
                <a>About</a>
            </Link>
        </nav>
    )
}

 

Styled JSX

styled JSX는 기존 리엑트에서 볼 수 없었던 방식인데,

그 이유는 Next JS의 고유 방법이라고 합니다.

 

 

style 태그와 jsx 프로퍼티

스타일링 할 컴포넌트 내에 style 태그를 넣어주고

안에 jsx 프로퍼티를 넣어주어 스타일링 구조를 잡습니다.

style 태그 안에 {} 와 스타일링 코드를 집어넣을 스트링을 ``(백틱)으로 묶습니다.

return (
    <nav>
      <Link href="/">
        <a>Home</a>
      </Link>
      <Link href="/about">
        <a>About</a>
      </Link>
      <style jsx>{``}</style> // style 태그안에 jsx 프로퍼티를 넣어줍니다.
    </nav>
  );

 

그리고 기존 스타일링을 했던것 처럼 css 코드들을 넣습니다.

<style jsx>{`
    nav {
      background-color: tomato;
    }
    a {
      text-decoration: none;
    }
`}</style>

 

독립적인 스타일링 Scoped

그리고 브라우저창으로 가서 inspect 해보면 다음과 같이 class가 불규칙적으로 들어가는것을 확인할 수 있습니다.

이것이 의미하는것은 style jsx 로 넣은 코드는 해당 컴포넌트에서 독립적으로 동작한다는것을 의미합니다.

아래와 같이 NavBar 컴포넌트를 사용하는 페이지에서 style jsx 를 통해 a 태그의 색을 바꾸더라도 NavBar 컴포넌트에 관여하지 않습니다.

 

동적 클래스

이제 styled jsx 의 동작 원리를 알았으니 css module에서 작성했던 기능을 다시 적용해보겠습니다.

className을 라우터 주소이름에 따라 active를 동적으로 넣어줍니다.

 

<동작원리>

index page 즉 / 페이지일때엔 Home 라우터 버튼에 active를,

/about페이지 일땐 About 라우터 버튼에 active를 넣고

active 클래스가 있다면 색을 노란색을 적용해주었습니다.

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>{`
        nav {
          background-color: tomato;
        }
        a {
          text-decoration: none;
        }
        .active {
          color: yellow;
        }
      `}</style>
    </nav>
  );

 

css 문법 또한 동적으로 props로 받은 값을 넣어줄 수 있습니다.

 

 

next js 에서 기본적으로 제공해주는 스타일링에 대해서 알아보았습니다.

css module 과 styled jsx 가 있었는데,

강의를 한 노마드코더분도 styled jsx 의 이점을 강조해준것과 같이

css module 보다 styled jsx의 사용법이 더 편리하다고 느꼈습니다.

 

따로 import 해와서 작성할 필요도 없고 class명을 짓고 className을 지정해주지 않아도 되는부분과 한 파일 내에서 독립적으로 적용되는 css 를 작성할 수 있어서 코드를 읽고 이해하는데에도 좋다고 생각이듭니다.

 

 

'Next.js > 기초 공부 시작( 겉핥기 )' 카테고리의 다른 글

Next js Layout Patterns  (0) 2022.04.10
Next js Custom App , global style, _app.js  (0) 2022.04.09
Next js CSS Module  (0) 2022.02.13
Next js Routing  (0) 2022.02.13
Next js 사전 렌더링  (0) 2022.02.13
댓글
최근에 올라온 글