Po_tta_tt0
콩심콩 팥심팥 🌱
Po_tta_tt0
전체 방문자
오늘
어제
  • 분류 전체보기 (266)
    • 🐛 회고 (14)
    • 💭 생각 (2)
    • 🤸‍♀️ 내 프로젝트 (16)
      • FISH-NEWS (8)
      • MBTI 과몰입 테스트 (2)
      • twitter clonecoding with TS (4)
      • pilzagenda (2)
    • 👨‍👩‍👧‍👦 팀 프로젝트 (2)
      • 피우다 프로젝트 (0)
      • SEMO(세상의 모든 모임) (1)
      • 마음을 전하는 텃밭 (1)
      • Stackticon (0)
    • 👨‍💻 CS지식 (11)
    • ✍ 공부 (94)
      • JavaScript (21)
      • TypeScript (39)
      • Html (0)
      • CSS (2)
      • React (18)
      • NextJS (7)
      • Vue (1)
      • Python (1)
      • Django (0)
      • 개발환경 & 그 외 (2)
    • 🏄‍♀️ 코딩테스트 (99)
      • 🐍 Python (99)
    • 🐙 Git & GitHub (3)
    • 📑 오류기록 (8)
    • 📚 우리를 위한 기록 (9)
    • 수업 (3)
    • 강의 등 (2)
    • 👩‍🎓 SSAFY (0)
    • 👋 우테코 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • react-router-dom
  • 자바스크립트
  • js
  • Next.js
  • 백준 파이썬
  • dfs
  • 문자열
  • 플로이드 워셜
  • 백준
  • DP
  • 시뮬레이션
  • 파이썬
  • BFS + DP
  • 이분탐색
  • 구현
  • bfs
  • 파이썬 감시 피하기
  • 파이썬 다익스트라
  • 백준 숨바꼭질
  • React

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Po_tta_tt0

콩심콩 팥심팥 🌱

✍ 공부/React

BrowserRouter HashRouter 차이 + BrowserRouter 배포시 흰 화면 문제

2022. 3. 14. 13:11
반응형

 

 

내가 공부하다가 궁금해서 정리해본 차이점

 

 

 

 

react는 알다시피 SPA(single page application)에 최적화 되어있다.

그 이유 중 하나가 바로 router.

1. react-router-dom을 설치해서 이용하며

2. a 태그를 이용할 때 생기는 무의미한 재랜더링을 예방 => 속도가 빠르다

 

router에는 우리가 익히 아는 

 

BrowserRouter

HashRouter

외에도

StaticRouter

MemoryRouter

NativeRouter

이 있다.

 

 

 

🤷‍♀️ BrowserRouter과 HashRouter의 차이는?

 

BrowserRouter

 www.123123/post

1. HTML5의 history API를 이용해 UI를 업데이트

2. 동적인 페이지에 적합

3. 새로 고침 / 경로를 이용해 찾아갈 때 에러 발생 => 추가적인 세팅 필요.

 

HashRouter

 www.123123/#/post

1. URL의 hash를 이용함

2. 주소에 #가 붙는다

3. 정적인 페이지에 적합

4. 검색 엔진으로 읽지 못한다 ( #값 때문)

5. 새로고침 해도 에러가 나지 않는다

6. 주소가.. 못생김!

 

 

 

 

🤷‍♀️ 그래서, BrowserRouter과 HashRouter의 차이는 왜 궁금해 하는 건데?

 

내가 경험한 문제는 deploy를 했을 때 일어났다.

BrowserRouter을 사용해 코드를 짜고 배포했을 때 배포한 코드가 Route를 인식하지 못하고 그냥 흰 화면에 div 위치만 보여지는 일이 발생했다.

하지만 HashRouter을 사용했을 때는 이 문제가 생기지 않았다.

 

 

 

🤷‍♀️ 문제의 원인?

 

BrowserRouter을 이용했을 때만 오류가 생겼던 이유는

HashRouter을 사용했을 때는 도메인 뒤에 /#/ 이 붙으면서 도메인 주소를 확실히 인식시킬 수 있지만

BrowserRouter은 그게 아니었던 것!

다시 말해

아무런 설정 없이 BrouwserRouter로 짠 코드를 배포하게 되면

라우터가 가리키는 '/'의 경로가 우리가 설정한 리포지터리 이름이 아니게 된다

=> 흰 화면이 나오는 것이 당연함

왜? 아무것도 없는 index.html 화면만 그려주고 있으니까

 

 

 

🤷‍♀️ 해결 방법은?

 

1. HashRouter을 쓴다.

당연하다, BrowserRouter이 가지고 있는 문제이기 때문에 HashRouter을 쓰면 해결 될 문제이다

그러나 HashRouter을 쓰지 못할 이유가 있다면

 

 

2. ✨ basename 추가하기 ( 권장 ) 

 

BrowserRouter 안에 props를 추가해 basename을 설정해주면 된다.

 

<BrowserRouter>

const AppRouter = () => {
  return (
    <BrowserRouter basename={process.env.PUBLIC_URL}>
      <Routes>
        <Route path="/" element={<Coins />} />
        <Route path="/:coinId/*" element={<Coin />} />
      </Routes>
    </BrowserRouter>
  );
};

여기서 PUBLIC_URL은 package.json의 homepage URL 값으로 설정된다.

 

<package.json>

"homepage": "https://userJu.github.io/react-masterclass-coin-challenge"

 

 

 

🙇‍♀️

  • https://worker-k.tistory.com/entry/React-BrowserRouter%EC%99%80-HashRouter%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%A0%95%EB%A6%AC
  • https://create-react-app.dev/docs/advanced-configuration/

 

  • 노마드코더 react masterclass 수업을 들으신 이름모를 감사하신 분

 

 
반응형

'✍ 공부 > React' 카테고리의 다른 글

[ React Hook Form ] react에서 form 쉽게 이용하기 (+TypeScript)  (0) 2022.04.01
React에서 styled-component 이용하기 + typescript  (1) 2022.03.28
react로 setInterval을 사용할 때 겪을 수 있는 문제들  (0) 2022.02.24
🔧[ recoil ] recoil로 react 상태관리 하기  (0) 2022.01.26
🥜 [ React ] react 학습내용 나름대로 정리하기 1  (0) 2022.01.21
    '✍ 공부/React' 카테고리의 다른 글
    • [ React Hook Form ] react에서 form 쉽게 이용하기 (+TypeScript)
    • React에서 styled-component 이용하기 + typescript
    • react로 setInterval을 사용할 때 겪을 수 있는 문제들
    • 🔧[ recoil ] recoil로 react 상태관리 하기
    Po_tta_tt0
    Po_tta_tt0
    감자의 코딩하는 블로그 콩심은데 콩나고 팥심은데 팥난다

    티스토리툴바