서로 다른 URL 즉 URL의 여러 경로로 서로 다른 페이지를 로드할 수 있는 기능
우선 그동안 우리가 만든 페이지는 1개의 페이지 밖에 존재하지 않는다. 이런 웹의 단점은
한가지의 URL만 갖고있어 공유할 때 메인 페이지 밖에 안 보이고 다른 기능들은 직점 탐색해야한다.
그럼 일반적으로 구현하던 server로부터 저장된 html파일을 받아오면 어떻게 될까? 바로 기존에 있던 state가 모두 날아가버린다는 단점이 있다. * 또한 랜더링 되며 화면이 다시 로드되는 것은 즉각적인 반응형 web app이 아니다.
그래서 우리는 대신 client 측 application을 load하기 위해 brower에서 실행되는 JS web app이 필요하다.
사용자가 웹 사이트를 처음 방문할 때 처음 로드되는 HTML 페이지는 하나이다.
다음 JS가 이를 이어서 페이지를 만든다.
또한 JS를 통해서 URL을 제어하고 해당 URL이 변경되거나 새 HTML 파일을 가져오지 않고 링크를 클릭할 때 화면에 표시되는 내용을 변경하는 일부 클라이언트 사이트 그리고 일부 React 코드를 작성하거나 사용할 수도 있다.
그래서 도메인 뒤의 해당 경로와 작동하는 URL과 작동하는 일부 코드가 필요하다.
또 페이지의 링크 클릭을 수신하여 해당 경로를 URL로 업데이트하는 코드도 필요하다.
하지만 실제로 새 HTML 파일에 대한 요청을 서버에 보내지 않고 대신 우리가 작성하거나 차단해야 하는 패키지를 수행하는 이 코드가 브라우저 기본값을 수행하게 된다.
대신 리액트가 포함된 클라이언트 사이드 JavaScript로 화면에 표시되는 내용을 업데이트한다
즉, 우리는 모든 라우팅을 수행하고 URL을 확인하고 URL 변경을 기반으로 화면에 다른 컴포넌트를 가져오는 패키지가 필요하고 이것이 바로 react-router
이다.
멀티 페이지 React 애플리케이션을 제작할 때 유용한 패키지로 클라이언트 사이드 React 앱에서 라우팅 기능을 지원하는 패키지이다.
리액트 라우터는 궁극적으로는 페이지에서 다른 경로를 처리하고 다른 경로에 대해 다른 컴포넌트를 로드하게 되는 것을 뜻한다.
예를 들어, domain.com/A => 메인 컴포넌트 domain.com/B => 회원가입 컴포넌트 이런식으로
이는 컴포넌트를 domain의 이름에 따라 조건부로 렌더링 한다는 것이다.
<Route path={"/URL이름"} element={<컴포넌트/>}></Route>
<Route path={"/URL이름"}>
<컴포넌트/>
</Route>
* 얘를 들어 위와같이 welcome URL 컴포넌트 안에 Route 컴포넌트를 만든다면 어차피 저 Welcome 컴포넌트가 로드 될때 해당 Route가 reevaluate되기 때문에 exact props을 쓰지 않아도 되고 더 많은 콘텐츠를 로드할 수 있고 또 더 복잡한 UI를 구축하는데 사용할 수 있다.
<Link to={"/URL이름"}>
exact
property를 제공한다.<NavLink activeClassName={classes.active} to="/URL이름">이름</NavLink>
:
:
으로 값을 넘겨주면 된다. 마치 placeholder처럼const params = useParams();
console.log(params.URL이름);
<Route path={"/"} exact>
<Redirect to={"/메인페이지 URL이름"}/>
</Route>
/
가 있어야 한다.