전체 페이지를 요청마다 렌더링 하는 것이 아니라 필요한 부분만 렌더링하는 것
장점
단점
Browser Routers는 html history api를 활용함
React Router에서 일반적으로 사용하는 요소, 아래에 차례대로 import 되어있다.
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
라우트 매처를 jsx에 삽입하고, url과 컴포넌트를 매칭해준다.
라우팅을 호출하는 컴포넌트는 로 to 속성에 해당되는 url을 매칭해준다.
<BrowserRouter>
<div>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
<Routes> //route matcher
<Route path="/" element={<Home />} /> // route changer
<Route path="/about" element={<About />} />
</Routes>
</div>
</BrowserRouter>
import { NavLink, useNavigate } from 'react-router-dom';
let navigate = useNavigate();
<NavLink activeClassName='active' to="/tweets">
<i className="far fa-comment-dots"></i>
</NavLink>
<button onClick={() => navigate(-1)}>
뒤로가기
</button>
리액트 가상 DOM
리액트는 전체페이지를 렌더링 하기 전에 가상 DOM에 따로 전체를 미리 렌더링 해 본후 기존의 페이지와 비교하여 달라진 부분만 렌더링한다. (기존에는 한 곳만 달라져도 모두 다시 렌더링하는 방식이다.)
개별 엘리먼트를 일일이 렌더링 하려면 메모리사용과, 코드량 모두 많아지는데 리액트는 이런 문제점을 가상 DOM을 활용하여 해결했다.
때문에 <li>
와 같이 반복되는 엘리먼트에는 key
속성이 필수인데, 리액트 가상 DOM에서 다시 렌더링할 대상을 결정하기 위해서 key라는 유니크한 밸류가 필요하기 때문이다.
리액트에서 키값을 자동으로 지정해주는 라이브러리도 존재한다.
$npx codestates-assignment-manager login