본문 바로가기
WEB/NEXT

[NEXT] 1강 소개, 페이지 레이아웃 + 2강 Dynamic Routes, next/link

by 뭉망뭉 2022. 5. 9.

타이틀 링크를 클릭하면 해당 주차 강의 코드가 정리된 깃허브로 연결됩니다.

1강 소개, 페이지 레이아웃

  • npx create-next-app으로 설치
  • 설치 시 앱 이름을 디폴트인 my-app으로 해줬다면 cd my-appyarn dev 혹은 npm run dev로 실행
  • create-next-app 으로 설치하면
    • 컴파일과 번들링이 자동으로 됨 (webpack 과 babel)
    • 자동 리프레쉬 기능으로 수정하면 화면에 바로 반영
    • 서버사이드 렌더링 지원
    • 스태틱(정적) 파일 지원
  • 자동 라우팅 지원: pages 폴더에 js 파일 만들면 자동으로 라우팅 적용됨.
    • 다이나믹 라우팅 가능: pages/view/[id].js 생성 시 /view/[id] 라우팅. [id]에 아무거나 쳐도 인식됨.
  • css 프레임워크
    • Semantic UI React 이용
    • npm install semantic-ui-react semantic-ui-css
  • _app.js 이용 시:
    1. 페이지 전환시 레이아웃 유지 가능.
    2. 페이지 전환시 상태값 유지 가능.
    3. componentDidCatch를 이용해 커스텀 에러 핸들링 가능.
    4. 추가적인 데이터를 페이지로 주입 가능.
    5. 글로벌 CSS 를 이곳에 선언.
    • 모든 페이지에 적용돼야 하는 내용 있으면 여기에.
  • _MyApp
    • MyApp의 props로 넘어온 Component: 현재 페이지. 페이지 전환 시 component props가 변경.
    • pageProps는 데이터 patching 메서드를 통해 미리 가져온 초기 객체. 이 메서드 사용 안 하면 빈 객체 전달.
  • _document.js
    • Html, head, body 등을 이용해야 할 때 이 파일 필수적으로 사용해야.
    • 서버에서만 렌더링됨. 이벤트 작동 안 됨. css 사용 안 함.

2강 Dynamic Routes, next/link

동적 라우팅

// pages/view/[id].js

import { useRouter } from "next/router";

const Post = () => {
    const router = useRouter();
    // [id].js로 파일 만들어줬을 때 라우터에 {id}값 아무거나 들어오면 여기로 라우팅됨.
    const { id } = router.query;

    return <p>Post: {id}</p>
}
export default Post;
  // src/component/ItemList.js
  {/* next/link로 import해온 link: 이거 클릭하면 href 애로 연결해줌. */}
  {/* href는 next가 알고 있어야 하는 주소. as는 사용자가 보는 주소. */}
  <Link href="/view/[id]" as={`/view/${item.id}`}>
  </Link>

axios

// pages/view/[id].js
    const API_URL = `http://makeup-api.herokuapp.com/api/v1/products/${id}.json`;

  function getData() {
    Axios.get(API_URL).then((res) => {
      setItem(res.data);
    });
  }

  useEffect(() => {
    // id가 있고 0보다 클 경우
    if (id && id > 0) {
      getData();
    }
  }, [id]);

slice

// index.js

return (
  <div>
    <Head>
      <title>HOME</title>
    </Head>
    <Header as="h3" style={{ paddingTop: 40 }}>
      베스트 상품
    </Header>
    <Divider />
    {/* slice로 0부터 9까지 */}
    <ItemList list={list.slice(0, 9)} />
    <Header as="h3" style={{ paddingTop: 40 }}>
      신상품
    </Header>
    <Divider />
    {/* 9부터 나머지 */}
    <ItemList list={list.slice(9)} />
  </div>
);

 

더보기

코딩앙마의 NEXT 강의를 정리한 내용입니다

 

댓글