개인 공부를 위해 작성했습니다
페이지가 한 개인 어플리케이션.
- react는 하나의 html파일에 렌더링하는 방식으로 구현됨
- 하나의 html파일에 여러 개의 페이지를 보여주는 방법이
Routing
다른 경로(url 주소)에 따라 다른 View(화면)을 보여주는 것
react
가 framework
가 아닌 library
로 분류되는 이유React-router
react의 routing 기능을 위해 가장 많이 사용되는 library--save
package.json파일의 dependencies에 추가되도록 하는 명령어<Router>
아래에 위치시키기<Router>
아래에 위치 시킨다는 말은, <Router>
기능을 추가하겠다라는 뜻import React from 'react';
import { BrowserRouter as Router, Switch, Route, } from 'react-router-dom';
// import Component명 from 'file 경로';
import Login from './pages/Login/Login';
import Signup from './pages/Signup/Signup';
import Main from './pages/Main/Main';
class Routes extends React.Component {
render() {
return (
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route exact path="/signup" component={Signup}/>
<Route exact path="/main" component={Main} />
</Switch>
</Router>
)
}
}
export default Routes;
ReactDOM.render(<Routes />, document.getElementById('root'));
<Link>
프로젝트 파일 내, 조건없이 이동할 때 사용<Link to="/signup">회원가입</Link>
withRouterHOC
조건이 필요한 경우 사용import React from 'react';
import { withRouter } from 'react-router-dom';
class Login extends React.Component {
goToMain = () => {
this.props.history.push('/main');
}
render() {
return (
<div>
<button className="loginBtn" onClick={this.goToMain}>
로그인
</button>
</div>
)
}
}
export default withRouter(Login);
어느 순간부터
Switch를 react-router-dom 패키지에서 import 할 수 없다
는 오류가 생겼는데, 알고 보니react-router-dom v6
에서Switch
가Routes
로 바뀌었다고 한다.
// v5
<Switch>
<Route ... />
</Routes>
// v6
<Routes>
<Route ... />
</Routes>
path="/Web/:id"
에서 path=":id"
로, 상대경로로 지정path="."
, path=".."
등으로 상대경로를 표현// categores 로 시작되는 모든 라우팅 매칭
<Route path='categories/*' />
// v5 버전 사용 예시
<Route exact path="/" component={Login} />
)}
/>
// v6 버전 사용 예시
<Route path="/" component={<Login />} />
// v5
const history = useHistory();
history.push('/home');
history.replace('/home');
// v6
const navigate = useNavigate();
navigate('/home');
navigate('/home', {replace: true});
// v6 에서의 앞으로, 뒤로 가기 사용방법 변화
<button onClick={() => navigate(-2)}>Go 2 pages back</button>
<button onClick={() => navigate(-1)}>Go back</button>
<button onClick={() => navigate(1)}>Go forward</button>
<button onClick={() => navigate(2)}>Go 2 pages forward</button>
import {
BrowserRouter,
Routes,
Route,
Link,
Outlet
} from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="users" element={<Users />}>
<Route path="me" element={<OwnUserProfile />} />
<Route path=":id" element={<UserProfile />} />
</Route>
</Routes>
</BrowserRouter>
);
}
function Users() {
return (
<div>
<nav>
<Link to="me">My Profile</Link>
</nav>
<Outlet />
</div>
);
}
import React from 'react';
import { BrowserRouter as Router, Routes, Route, } from 'react-router-dom';
import Login from './pages/Login/Login';
import Signup from './pages/Signup/Signup';
import Main from './pages/Main/Main';
class Routes extends React.Component {
render() {
return (
<Router>
<Routes>
<Route path="/" component={<Login />} />
<Route path="/signup" component={<Signup />}/>
<Route path="/main" component={<Main />} />
</Routes>
</Router>
)
}
}
✅ 목표!
router
가 무엇이고 왜 써야 하는지,router
사용 방법에 대해 익히자