서버에게 별다른 요청을 보내지않고 클라이언트의 브라우저 단에서 여러 페이지를 왔다갔다 방문할 수 있는 기능
브라우저는 현재 탭의 방문 기록을 메모리 상에서 스택의 형태로 관리, 이 히스토리 스택을 조작하기 위해 탭 단위로 존재하는 window 전역 객체의 프로퍼티인 hitory객체의 프로퍼티들과 메소들로 제공됨
react-router-dom 패키지는 이 history패키지를 활용하여 클라이언트 사이드 라우팅을 구현한 것이다.
Router 컴포넌트 인스턴스 생성될 때
Router 컴포넌트는 props로 전달받은 history객체의 프로퍼티인 loaction객체를 자신의 지역 상태에 저장 그리고 props로 전달받은 history객체를 구독하여 브라우저의 현재 URL이 변경될 때마다 자신의 지역 상태에 해당하는 location 객체가 새로운 location 객체로 대체되도록 함
Router 컴포넌트 렌더링 조직
Router 컴포넌트는 현재의 URL과 관련된 정보를 Context로 구성해서 Context의 Provider(Routercontext,Provide)를 렌더링 (브라우저의 현재 url과 관련된 정보들 참조하기 위해서) , 이때 context로 구성된 정보로는 match, location, history객체가 있음
Route 컴포넌트는 props 로 전달받은 path 값이 브라우저 현재 url과 매칭 될 때 특정 컴포넌트를 렌더링하는 컴포넌트
Router.context.consumer 컴포넌트를 렌더링함으로 RouterContext를 참조함
매칭되는 경우 props로 RouterContext와 동일한 구성의 값(match, location, history)를 넘겨준다