
라우팅은 기본적으로 네트워크에서 경로를 선택하는 프로세스를 의미한다.
쉽게 말해, 다양한 주소의 요청이 들어오면 각 주소에 맞는 콘텐츠로 이동시켜주는 작업이다.

출처 : 생활코딩
html 파일 여러개 만들면 그 자체가 여러개의 페이지.
a태그를 통해 이동하면 그게 라우팅.
근데 리액트는 HTML 파일이 index.html 하나임
그래서 리액트에선 누가 다른 페이지 요청하면 그냥 내부에 있는
그리고 이것이 일반 a태그를 사용하는 것과는 다르게 페이지 전체를 로딩하지 않기 때문에 SPA를 통해 사용자 경험 향상을 목적으로 하는것이다. 일명 그 화면 깜빡이는 페이지 전환없이 부드럽게 전환됨
걍 SPA 안에서 모든 페이지를 다 렌더링해주는 형식으로 만들면 안되냐? 는 의문이 들 수 있다.
그 방식은 다양한 문제를 야기하는데.. 대부분은 컨텐츠는 변화되어도 url이 고정되어 있다는데서 야기된다.
URL의 해쉬(#)값을 이용하는 라우터이다.
index.js
import { BrowserRouter } from 'react-router-dom';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>
);
app.js
import { Routes, Route, Link, useNavigate, Outlet } from "react-router-dom";
<Routes>
<Route path="/about" element={<About />}>
<Route path="member" element={<div>멤버임</div>}></Route>
<Route path="location" element={<About />}></Route>
</Route>
<Route path="/event" element={<Event />}>
<Route
path="one"
element={<div>첫 주문시 양배추즙 서비스</div>}
></Route>
<Route path="two" element={<div>생일기념 쿠폰받기</div>}></Route>
</Route>
<Route path="*" element={<div>404pages</div>}></Route>
</Routes>
Routes 태그안에 필요한 Route 페이지들을 기술해준다.
function App(){
let navigate = useNavigate()
return (
(생략)
<button onClick={()=>{ navigate('/detail') }}>이동버튼</button>
)
}
navigate를 사용해 간단히 이동가능
<Route path="*" element={ <div>없는페이지임</div> } />
path 설정을 *으로하면 설정된 페이지 이외의 모든 페이지다. 즉 유효하지 않은 페이지로 접근 시 보여줄 화면을 설정해주기에 용이하다.
<Route path="/about" element={ <About/> } >
<Route path="member" element={ <div>멤버들</div> } />
<Route path="location" element={ <div>회사위치</div> } />
</Route>
저렇게 Route 안에 Route를 중첩하게 되면
실제론 /about/member로 접속하면 about의 내용과 member의 내용이 함께 출현한다. 허나 about 내에 member 경로기 때문에 member가 about내의 어디에 표현될지를 정해야 하는데
function About() {
return (
<div>
<h3>회사정보</h3>
<Outlet></Outlet>
</div>
);
}
저렇게 Outlet을 사용하여 여기에 표현해줘! 를 기술한다.
상세페이지같은거 100만개면 Route 페이지 100만개 만들 순 없지않나.
그럴때 URL Parameter를 통해 여러개 생성 가능하다
<Route path="/detail/:id" element={ <Detail shoes={shoes}/> }/>
저렇게 경로에 id값을 추가하여 고유한 페이지를 생성한다.
function DetailPage(props) {
let { id } = useParams();
}
그리고 useParams를 통해 해당 parameter를 사용 가능하다!
주소 경로 내부에 특정 데이터를 넣어 전달하는 두 가지 방식이다.
url 파라미터는 ID 이름 특정 데이터를 조회할때 사용하는거라 일반적인 변수, 상수 값들을 전달하기 용이하고
쿼리스트링은 키워드 검색, 페이지네이션, 정렬방식 등 데이터 조회에 필요한 옵션을 전달할 때 사용하며
key, value 형태의 데이터이므로 json이나 객체 형태의 데이터를 전달하기에 용이하다!