00:00*학습 시작 전 참고사항
react-router-v6 공식 문서 링크: https://reactrouter.com/docs/en/v6
영상 코드가 업로드된 github 주소: https://github.com/iamshaunjp/React-Router-Version-6/tree/lesson-2
사용하는 용어 정리:
pathname은 localhost:3000/products에서 /products를 의미
00:03*학습 시작 전 참고사항2
react router 버전5로 작성했던 코드를 수정하지 않은채 react router 버전6로 업그레이드 하니 에러가 발생한 모습입니다.
이 영상은 프로젝트에서 react router v6로 업그레이드 하면서 마주할 수 있는 에러를 디버깅 하는 것을 보여줍니다.
react-router 버전6를(로) 설치(업그레이드)하는 terminal 명령어: npm install react-router-dom@6
*25초 구간으로 jump 해주세요.
00:25~01:49
에러 유발 코드를 주석처리합니다.
ProductDetails.js의 nested route, useRouteMatch
About.js의 nested route
*useRouteMatch는 버전 6에서 사용되지 않습니다.
*nested 부분은 일단 주석처리만 하고 에러를 방지하고 넘어갑니다. 실질적인 해결은 다음 학습노트에서 언급합니다.
01:50~05:32
에러 유발 코드를 수정합니다.
App.js의 Switch 를 Routes 컴포넌트로 대체합니다.(버전6에서는 Switch가 사용되지 않습니다)
App.js의 exact 제거(버전 6에서는 모든 Route가 default로 exact가 적용됩니다, 즉 Route의 순서는 중요하지 않습니다)
App.js의 Route가 컴포넌트를 감싸는 방식을 element을 사용하는 방식으로 변경
*참고로 element에는 component가 아닌 element(JSX)를 입력해야합니다.
*element는 component를 호출해서 리턴되는 형태라고 생각하시면 됩니다.(component는 함수 element는 함수의 호출 결과 느낌)
05:32~05:53
위의 내용대로 수정한 결과, 에러가 사라졌습니다.
*nested route 부분은 주석처리 해놓았기 때문에 nav 부분만 화면에 표출됩니다.
*버전 6에서는 모든 Route가 exact하게 routing 되기 때문에 /about/offers에 대해선 어떤 Route도 해당되지 않습니다.(App.js에서 위의 pathname에 대해 대응하는 Route가 없으므로) 이후 이 러닝패스의 다음 학습노트에서 해당 부분을 다룹니다.
06:05~06:59
pathname이 '/test'인 Route에 대해서 element로 JSX를 넘겨줍니다.
이런 방식도 가능하다는 것을 알려주는 느낌입니다.
해당 학습노트에서는 react router 버전6에서 redirect를 어떻게 구현하는지 소개합니다.
공식 문서: https://reactrouter.com/
00:50
react router 버전5에서 redirect를 구현하는 방법입니다.
*예상 시나리오: pathname이 '/redirect'인 page 접근 시 pathname '/about'인 page로 전환됨
*특정 pathname에 redirect 로직을 등록하는 이유는 가지각색이겠지만 그 중 대표적인 용도는 로그인 여부 검사입니다. 서비스를 이용하는 유저가 로그인을 했을 경우 특정 pathname에 접근하지 못하도록 사용하는 것이죠.