-
[ Vite + React ] Route, Routes 페이지 이동Front/React 2024. 10. 5. 13:56반응형
Route를 활용하여 페이지 이동을 할 수 있다.
npm install react-router-dom
react-router-dom을 설치하여 Route와 Routes를 import
App.tsx ( 타입스크립트를 사용하기에 js 파일이 아닌 tsx확장자를 가진다.) 에 Route, Routes를 import
import React from 'react'; import { Route, Routes } from "react-router-dom";
이후 index 파일에서 <app/> 을 <BrowserRouter> 로 감싸주면 Rotue를 사용할 수 있다.
import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.scss'; import App from './App'; import reportWebVitals from './reportWebVitals'; import {BrowserRouter} from "react-router-dom"; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render( // <React.StrictMode> <BrowserRouter> <App /> </BrowserRouter> // </React.StrictMode> ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals();
Routes, Route
Routes 로 사용할 Route를 감싸준다.
Route에서는 path는 해당 경로로 접속시 element에 넣은 component를 화면에 보여준다.
import React from 'react'; import { Route, Routes } from "react-router-dom"; import './App.css'; import Main from "./Main"; import * as Pages from './page/Pages'; function App() { return ( <div className="App"> <Routes> <Route path="/" element={<Main/>}> <Route path="" element={<Pages.Login.Login/>}/> <Route path="home" element={<Pages.Home.Home/> }/> </Route> </Routes> </div> ); }
Route안에 Route를 설정하면
불필요한 경로를 입력을 하지 않아도 된다.
path="/" 로 되어있는 route 안에 추가적으로 path를 넣어주면
/ 경로인 경우에는 Login 화면으로 경로가 설정되며
/home 경로는 home 화면으로 설정된다.
import {Outlet} from "react-router-dom"; import Header from "./component/header/Header"; import Footer from "./component/footer/Footer"; import './main.scss' function Main() { return( <div className="default-padding"> <Header/> <Outlet></Outlet> <Footer/> </div>) } export default Main;
default "/" 경로에 Main을 넣어 어느 페이지에서든지 header와 footer는 항상 나오도록 설정
이후 outlet을 활용하여 모든 컴포넌트는 outlet 영역에서 만들어지도록 한다.
> page들을 import할때 좀 더 관리를 하기 위해 Pages파일을 만들어 파일들을 하나로 묶어서 export를 진행
로그인 관련 component를 한번에 export하기 위해 Login.ts파일에서 login관련된 파일들을 모두 export 진행
Home 도 마찬가지로 home.ts파일에서 모두 export를 진행
export {default as Login} from './LoginMain';
이후 pages.ts파일에서 export한 모든 파일들을 전부 export
export * as Login from "./login/Login"; export * as Home from "./home/Home";
마지막으로 App에 import하면
Pages.Login.Login 처럼 좀 더 구조를 갈끔하게 관리할 수 있다.
Navigator
useNavigate를 활용하여 버튼을 누르면 해당 페이지로 이동하도록 기능을 구현
간단하게 로그인 버튼을 만들어 onClick 이벤트에서 navigator를 사용하여 이동할 경로를 지정해준다.
import {useNavigate} from "react-router-dom"; function LoginMain() { const navigator = useNavigate() function handleLogin() { navigator('/home'); } return( <> <div className="login-container"> <button onClick={handleLogin}> 로그인 </button> </div> </> ) } export default LoginMain;
로그인 버튼을 누르면 home으로 이동되며 route에서 설정한 home 페이지로 이동하게 된다.
로그인 버튼을 누르면 홈 화면으로 이동이 되며
최종적으로 로그인 화면과 홈 화면에서 header와 footer는 그대로 남아있고 outlet으로 설정한 부분만 화면이 바뀌게 된다.
localhost:3000
localhost:3000/home
728x90반응형'Front > React' 카테고리의 다른 글
[ Vite + React ] Draggable Popup (0) 2024.10.12 [ Vite + React ] ContextMenu 우클릭 메뉴 커스텀 (0) 2024.10.12 [ Vite + React ] MobX 활용 DarkMode 상태관리 (0) 2024.10.12 [ Vite + React ] DarkMode&WhiteMode Toggle Button (0) 2024.10.12 [ Vite + React ] React SVG 사용 (0) 2024.10.12