서버로부터 완전한 새로운 페이지를 불러오지 않고 현재의 페이지를 동적으로 다시 작성함으로써 사용자와 소통하는 웹 애플리케이션이나 웹사이트를 말한다.
이러한 접근은 연속되는 페이지들 간의 사용자 경험의 간섭을 막아주고 애플리케이션이 더 데스크톱 애플리케이션처럼 동작하도록 만들어준다.
SPA의 경우 서버에서 사용자에게 제공하는 페이지는 한 종류이지만, 해당 페이지에서 로딩된 자바스크립트와 현재 사용자 브라우저의 주소상태에 따라 다양한화면을보여준다.
다른 주소에 다른 화면을 보여 주는 것을 라우팅이라고 한다. 리액트 라이브러리 자체에 이 기능이 내장되어 있지는 않지만 브라우저의 API를 직접 사용하여 관리하거나, 라이브러리를 사용하여 구현할 수 있다.
리액트 라우팅 라이브러리는 리액트 라우터(react-router), 리치 라우터(reach-router), Next.js 등 여러가지가 있다.
리액트 라우터는 클라이언트 사이드에서 이루어지는 라우팅을 아주 간단하게 구현할 수 있도록 해준다. 서버 사이드 렌더링을 할 때도 라우팅을 도와주는 컴포넌트들을 제공해 주고있다.
리액트에서는 경로에 따라 다른 뷰를 보여줄 수 있다. 이때 사용하는 라이브러리가 리액트라우터이다.
리액트 라우터는 크게 3가지로 나누어서 볼 수 있다.
1. 라우터 역할을 하는 BrowserRouter
: 컴포넌트의 최상위에 있어 리액트 라우터의 컴포넌트를 활용할 수 있도록 한다.
2. 경로를 매칭해주는 Routes, Route
: Routes컴포넌트가 경로가 일치하는 하나의 Route만 렌더링한다. Route 컴포넌트 안에는 path속성과 element속성이 존재하는데 이 속성들이 경로와 그 경로에 일치하는 컴포넌트를 매칭해준다.
3. 경로를 변경해주는 Link
: a태그와 비슷한 역할을 하는 Link컴포넌트이다. 누르면 화면(경로)를 변경해주는 역할을 한다. a태그는 페이지 전환시 처음부터 렌더링 시키는 새로고침을 하지만 Link는 페이지 전환을 방지하는 기능이 내장되어 있다. 따라서 SPA구현에 적합하다고 한다.