$ npm install react-router react-router-dom
<BrowserReouter />root 경로에 있는 index.tsx의 root.render()안에 <App/> 컴포넌트를 <BrowserRouter /> 컴포넌트로 묶어야함
URL를 사용하여 브라우저 주소 표시줄에 현재위치를 저장하고 탐색할 수 있도록 하는 컴포넌트
root.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>
);
특정 URL 패턴에 대해서 컴포넌트를 각각 다르게 렌더링 하고자 한다면 App.tsx에<Routs>컴포넌트와 <Route>컴포넌트를 사용하여 경로에 따라 화면을 다르게 보이게 하는게 가능
<Routes /><Route> 컴포넌트로 URL에 따른 컴포넌트들을 렌더링을 할수 있도록 도와줌<Route /><Route />속성function App() {
return (
<Routes>
<Route index element={<h1>기본페이지</h1>}/>
<Route path = '/component/component' element = {<Component/>} />
<Route path = '/component/ClassComponent' element = {<ClassComponent/>} />
<Route path = '/component/CurlyBraces' element={<CurlyBraces/>}/>
</Routes>
);
}
<Route path='/component' element = {<Component/>}>방법
<Route path='/component'>
<Route path = 'component' element = {<Component/>} />
<Route path = 'ClassComponent' element = {<ClassComponent/>} />
<Route path = 'FunctionComponent' element = {<FunctionComponent/>} />
<Route path = 'CurlyBraces' element={<CurlyBraces/>}/>
</Route>
<Outlet /> : 부모 <Route>에 해당 컴포넌트가 element로 등록되었을때 자식 <Route>의 element가 해당위치에 렌더링 되도록 하는 컴포넌트useLocation() : 현재 경로에 대한 객체를 반환하는 react-router 훅함수function Layout(){
const {pathname} = useLocation();
console.log(pathname);
return(
<div>
<div style={{height: '100px', backgroundColor:'red'}}></div>
<Outlet/>
<div style={{height: '100px', backgroundColor:'blue'}}></div>
</div>
)
}
return(
<Route path='/component' element = {<Layour/>}>
<Route path = 'component' element = {<Component/>} />
<Route path = 'ClassComponent' element = {<ClassComponent/>} />
<Route path = 'FunctionComponent' element = {<FunctionComponent/>} />
<Route path = 'CurlyBraces' element={<CurlyBraces/>}/>
</Route>
)
PathMove 함수에 대한 설명
1.<a />
2.<Link>
<Link />는 새로운 요청을 보내지 않음<a />요소 사용해야함‼️주의점
<Link />컴포넌트를 사용할수 없음3.location 객체
4.useNavigate()
export default function PathMove() {
const onClick = () =>{
for(let index = 0 ; index <100;index++){
console.log(index+'실행중...');
}
const flag =false;
if(!flag)return;
}
const onLocationHref = () => {
window.location.href = 'http://localhost:3000/component';
};
const navigator = useNavigate();
const onNavigator = () => {
navigator('/component');
}
return (
<div>
<a href="http://localhost:3000/component">앵커</a>
<br />
<Link onClick={onClick} to='/component'>링크 컴포넌트</Link>
<br />
<button onClick={onLocationHref}>location.href</button>
<br />
<button onClick={onNavigator}>navigator</button>
</div>
)
}
PathVariable() 함수 코드
useParams()
export default function PathVariable() {
const { name } = useParams();
return (
<div>
NAME: {name}
</div>
)
}
QueryString 함수
useSearchParam()
export default function QueryString() {
const [queryParam] = useSearchParams();
const name = queryParam.get('name');
const age = queryParam.get('age');
return (
<div>
<div style={{backgroundColor:'red'}}></div>
NAME : {name} / AGE : {age};
</div>
)
}
app.tsx
<Routes>
<Route path = '/router'>
//http://localhost:3000/router/query-String?name=홍길동&age=23
<Route path = 'query-String' element={<QueryString/>}/>
//http://localhost:3000/router/path-Valiable/홍길동
<Route path = 'path-Valiable/:name' element={<PathVariable/>}/>
<Route path = 'path-move' element={<PathMove/>}/>
</Route>
</Routes>
💡전체 경로에서 이동이 불가능할 경우 404Error Page 호출 방법
<Route path='*' element={<h1>404 Error !!!</h1>}/>