화면을 업데이트하기 위해 필요한 데이터만 서버에서 전달받아 브라우저에서 해당하는 부분만 업데이트하는 방식
으로 작동하는 웹 애플리케이션이나 웹 사이트를 말합니다.필요한 부분의 데이터만 받아서 화면을 업데이트
하면 되기 때문에 사용자와의 interaction에 빠르게 반응합니다서버 과부하 문제가 현저하게 줄어듭니다.
js파일의 크기가 큽니다
때문에 이 js 파일을 기다리는 시간으로 인해 첫 화면 로딩시간이 길어집니다.검색 엔진 최적화가 좋지 않습니다.
검색엔진 최적화란 구글이나 네이버 같은 검색엔진이 자료를 수집하기 좋도록 웹 페이지를 구성하는 것을 뜻합니다.라우팅(Routing)이라고 합니다.
React Router라는 라이브러리
를 써야한다.BrowserRouter
, 경로를 매칭해주는 Routes 와 Route
, 그리고 경로를 변경하는 역할을 하는 Link
입니다.1.react-router라이브러리 설치
npm install react-router-dom@^6.3.0
2.App.js로 react-router 컴포넌트 꺼내오기
import{..} from "react-router-dom"
1. < BrowserRouter >
function App () {
return (
<BrowserRouter>
<div>
<nav>
<ul>
<li>
Home
</li>
<li>
MyPage
</li>
<li>
Dashboard
</li>
</ul>
</nav>
</div>
</BrowserRouter>
)
}
export default App;
2.Routes, Route
경로를 매칭해주는 역할을 하는 컴포넌트입니다.
< Routes> 컴포넌트는 여러 < Route> 컴포넌트를 감싸서 그중 경로가 일치하는 단 하나의 라우터만 렌더링을 시켜주는 역할
을 합니다. < Routes> 를 사용하지 않으면 매칭되는 모든 요소를 렌더링합니다.
< Route> 컴포넌트는 path 속성을 지정하여 해당 path 에서 어떤 컴포넌트를 보여줄지 정합니다. 아래에서 배울 < Link> 컴포넌트가 정해주는 URL 경로와 일치하는 경우에만 작동됩니다.
return (
<BrowserRouter>
<div>
<nav>
<ul>
<li>
Home
</li>
<li>
MyPage
</li>
<li>
Dashboard
</li>
</ul>
</nav>
{/* 주소 경로와 아까 만든 3개의 컴포넌트를 연결해 줍니다. */}
{/* Routes 컴포넌트는 Route 컴포넌트들을 감싸고 있어야 합니다. */}
<Routes>
{/* 경로는 path로 컴포넌트는 element로 연결해 줍니다. */}
<Route path="/" element={<Home />} />
<Route path="/mypage" element={<MyPage />} />
<Route path="/dashboard" element={<Dashboard />} />
</Routes>
</div>
</BrowserRouter>
)
}
export default App;
팁 : 만약 사용자가 지정된 주소인 “/’, “/mypage”, “/dashboard” 이외의 주소로 접근하게 되면 의도한 화면이 보이지 않을 수 있습니다. 이럴 때 사용할 수 있는 속성이 path=”*” 입니다. 지정되지 않은 주소로 접근할 시에는 이 속성이 설정되어 있는 컴포넌트를 보여주게 됩니다.
function App() {
return (
<BrowserRouter>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>{/* Link 컴포넌트를 이용하여 경로를 연결합니다 */}
</li>
<li>
<Link to="/mypage">MyPage</Link>
</li>
<li>
<Link to="/dashboard">Dashboard</Link>
</li>
</ul>
</nav>
<Routes>
<Route path="/" element={<Home />} />
{/* 경로는 path로 컴포넌트는 element로 연결해 줍니다. */}
<Route path="/mypage" element={<MyPage />} />
<Route path="/dashboard" element={<Dashboard />} />
</Routes>
</div>
</BrowserRouter>
);
}
function Home() {
return <h1>Home</h1>;
}
function MyPage() {
return <h1>MyPage</h1>;
}
function Dashboard() {
return <h1>Dashboard</h1>;
}
export default App;