SPA
Single Page Application
SPA는 정적파일(html)을 최초에 한 번 다운로드받고, 사용자와 상호작용 결과 필요한 데이터만 서버에서 동적으로 다운로드 받는 애플리케이션 형태의 웹페이지를 말한다.
Routing
BrowserRouter 사용하기
애플리케이션에서의 라우팅은 어떤 화면(컴포넌트A의 주소)에서 다른 화면(컴포넌트 B의 주소)으로 화면을 전환하는 내비게이션을 관리하기 위한 기능이다. 브라우저에서 화면을 전환하는 경우는 다음과 같다.
브라우저 주소창에 URL을 입력해 해당 페이지로 이동한다
웹페이지의 링크를 클릭하여 해당 페이지로 이동한다
뒤로가기/ 앞으로 가기 버튼을 클릭하면 사용자가 방문한 웹페이지의 기록의 뒤, 앞, 또는 고정된 경로로 이동한다.
그런데, 리액트에는 라우팅 기능이 없기 때문에 리액트 SPA에서는 라우팅을 위해 React Router 라이브러리를 사용해야 한다.
npm install react-router-dom
위와 같은 과정을 통해 react-router-dom을 설치했다면, React Router의 주요 컴포넌트를 사용할 파일들에 import해온다.
//App.js
import {BrowserRouter, Switch, Route, Link} from 'react-router-dom';
1. 컴포넌트 import 해오기
2. 라우트할 컴포넌트 준비하기 (<Home/>,<Topics/>,<Contact/> 등)
3. 브라우저 라우터로 최상위 컴포넌트를 감싼다. (68줄)
4. Switch와 Route, NavLink 또는 Link 컴포넌트를 활용해서 완성한다.
NavLink, Link 컴포넌트의 특징
a 태그의 href 속성에 주소를 작성하면, 화면을 전환할 수 있지만 그때마다 서버로부터 데이터를 다시 불러와 새로고침된다. (개발자 Network창에서 확인가능) 하지만 NavLink, Link 컴포넌트는 페이지 전환을 방지하는 기능이 내장되어 있어 새로고침되지 않고 주소만 변경내용이 렌더링된다.
NavLink는 클릭됐을 때 className = 'active'가 활성화되어 css에 속성을 정의해줄 수 있다. 또는 activeClassName, activeStyle을 추가하여 스타일링할 수 있다.
exact 속성을 활용해서 유저가 URL을 입력하여 해당 페이지로 이동할때 정확히 일치하는 링크만 보여줄 수 있다.
Switch 컴포넌트
Route 컴포넌트