React

5강 — 라우팅과 배포

슬라이드 보는 법

→ / Space다음으로
이전으로
↓ / ↑같은 주제 안에서 단계 이동
O전체 슬라이드 한눈에 보기
F전체화면

아래쪽 화살표가 보이면 그 주제는 단계별로 이어집니다

지금까지

1강JSX, 컴포넌트, props
2강state, 이벤트, 폼
3강useEffect, 데이터 가져오기
4강Context, 커스텀 훅

오늘은 여러 화면을 붙이고 세상에 내보냅니다

오늘 끝나면 할 수 있는 것

  • 주소에 따라 다른 화면을 보여준다
  • 주소에서 값을 꺼내 쓴다
  • 빌드해서 정적 파일로 만든다
  • 인터넷에 올려 링크를 공유한다

오늘 배울 것

  • 24. SPA와 라우팅
  • 25. react-router
  • 26. 동적 라우트
  • 27. 빌드
  • 28. 배포
  • 29. 미니 프로젝트

24. SPA와 라우팅

화면이 여러 개라면

24. SPA와 라우팅

옛날 방식

주소마다 HTML 파일

이동할 때마다 새로고침
SPA

HTML은 하나

JS가 화면을 갈아끼운다

24. SPA와 라우팅

주소가 바뀌면
어떤 컴포넌트를 보여줄지 정하는 것

그것이 라우팅

24. SPA와 라우팅 주소 → 화면

/<Home />
/about<About />
/todos/3<TodoDetail />

25. react-router

주소마다 다른 화면을 보여주려면

25. react-router 설치

          
            npm install react-router-dom
          
        

25. react-router 기본형

            
              import {
                BrowserRouter, Routes, Route
              } from 'react-router-dom';

              <BrowserRouter>
                <Routes>
                  <Route path="/" element={<Home />} />
                  <Route path="/about" element={<About />} />
                </Routes>
              </BrowserRouter>
            
          

/ 에서는 Home

/about 에서는 About

25. react-router Link

            
              import { Link } from 'react-router-dom';

              <Link to="/about">소개</Link>
            
          
소개

새로고침 없이 화면만 바뀐다

25. react-router a 태그 금지

            
              <a href="/about">소개</a>
            
          
페이지 전체가 새로고침된다
state가 전부 초기화된다

여기서 Link 대신 a 태그를 쓰면?

25. react-router 404

          
            <Route path="*" element={<NotFound />} />
          
        

26. 동적 라우트

주소에서 값을 꺼내려면

26. 동적 라우트 :id

            
              <Route
                path="/todos/:id"
                element={<TodoDetail />}
              />
            
          
/todos/3id = "3"
/todos/7id = "7"

26. 동적 라우트 useParams

            
              import { useParams } from 'react-router-dom';

              function TodoDetail() {
                const { id } = useParams();
                return <h1>{id}번 할 일</h1>;
              }
            
          

3번 할 일

26. 동적 라우트 useNavigate

            
              import { useNavigate } from 'react-router-dom';

              const navigate = useNavigate();

              function handleSave() {
                save();
                navigate("/todos");
              }
            
          

저장 후 목록으로 이동

26. 정리

  • path="/todos/:id" 로 자리를 만든다
  • useParams() 로 꺼낸다. 항상 문자열
  • 코드로 이동하려면 useNavigate()

27. 빌드

내보낼 수 있는 파일로 만들려면

27. 빌드

            
              npm run build
            
          
dist/index.html
dist/assets/index-a1b2c3.js
dist/assets/index-d4e5f6.css

27. 빌드

  • dist/ 안의 파일이 전부다
  • 정적 파일이라 아무 웹서버에나 올리면 된다
  • 서버 프로그램이 필요 없다

27. 빌드 확인

            
              npm run preview
            
          
Local: http://localhost:4173/

28. 배포

인터넷에 올리려면

28. 배포 어디에

Vercel깃허브 연결하면 자동. 가장 쉽다
Netlifydist 폴더를 끌어다 놓아도 된다
GitHub Pages무료. 설정이 조금 필요하다

28. 배포 Vercel

  1. 깃허브에 저장소를 만들고 올린다
  2. vercel.com 에서 깃허브로 로그인
  3. 저장소를 고르고 Deploy
  4. 주소가 나온다

28. 배포 GitHub Pages

            
              // vite.config.js
              export default {
                base: "/저장소이름/",
              };
            
          
GitHub Pages는 주소가
/저장소이름/ 으로 시작한다

28. 배포 새로고침 404

            
              // 새로고침하면 404
              https://내앱.com/about
            
          
서버에 about.html 이 없다
SPA는 index.html 하나뿐

배포한 뒤 /about 에서 새로고침하면?

28. 정리

  • npm run builddist/
  • Vercel에 깃허브를 연결하면 자동 배포
  • 하위 경로에 올리면 base 설정이 필요하다

29. 미니 프로젝트

배운 것을 전부 써봅시다

29. 미니 프로젝트 조건

  • 화면이 둘 이상 — 라우팅
  • 서버에서 데이터를 받아온다 — useEffect
  • 사용자 입력을 받는다 — 폼
  • 배포해서 링크를 낸다

29. 미니 프로젝트 주제

  1. 영화 검색 — 목록과 상세 화면
  2. 동아리 게시판 — 글 목록과 작성
  3. 날씨 앱 — 도시별 화면
  4. 할 일 목록 완성판 — 2~4강에서 만든 것

뭘 만들지 모르겠으면 4번을 고르세요

29. 미니 프로젝트 조언

  • 작게 시작해서 돌아가게 만든 다음 늘린다
  • 예쁘게 만드는 건 마지막에
  • 막히면 공식 문서부터

정리

React 5강 전체

한눈에

1강JSX, 컴포넌트, props, map + key, 조건부
2강useState, 이벤트, 불변성, 폼, 끌어올리기
3강useEffect, 의존성 배열, 정리 함수, fetch
4강Context, useRef, useMemo, 커스텀 훅
5강라우팅, 빌드, 배포

더 볼 것

수고하셨습니다