설치
$npm install react-transition-group --save
사용법
react-router와 같이 사용했다.
App.js
import React, { Component } from "react";
import { BrowserRouter as Router } from "react-router-dom";
import Routers from "./Routers";
class App extends Component {
render() {
return (
<Router>
<Routers/>
</Router>
);
}
}
export default App;
BrowserRouter로 쓰면 주소창에서 직접 페이지로 접속이 안됐는데 따로 빼서 사용하니까 직접 접속이 된다. (아직 더 알아봐야 함.)
라우터를 이렇게 설정하고 다음으로 넘어가자.
Routers.js
import React from "react";
import { Switch, Route, withRouter } from "react-router-dom";
import { TransitionGroup, CSSTransition } from "react-transition-group";
import Home from "../Pages/Home";
import Login from "../Pages/Login";
function Routers({ location }) {
return (
<TransitionGroup className="transition-group">
<CSSTransition
key={location.key}
timeout={{ enter: 300, exit: 300 }}
classNames="fade"
>
<section className="route-section">
<Switch location={location}>
<Route
exact
path={process.env.PUBLIC_URL + "/"}
component={Home}
/>
<Route path="/signup" component={Login} />
</Switch>
</section>
</CSSTransition>
</TransitionGroup>
);
}
export default withRouter(Routers);
function Fouters({ location }) 여기서 location을 가져오려고 App에서 Router를 따로 뺏다. 안 빼고 쓰는 법을 못 찾음.
TransitionGroup과 CSSTransition을 사용했다. TransitionGroup으로 묶어주고 CSSTransition에 key를 줘서 각각 동작하게 하는 듯?
CSS
.fade-enter {
opacity: 0.01;
}
.fade-enter.fade-enter-active {
opacity: 1;
transition: opacity 300ms ease-in;
}
.fade-exit {
opacity: 1;
}
.fade-exit.fade-exit-active {
opacity: 0.01;
transition: opacity 300ms ease-in;
}
div.transition-group {
position: relative;
}
section.route-section {
position: absolute;
width: 100%;
top: 0;
left: 0;
}
CSS를 따라 안 하면 이전 페이지가 안 없어지고 아래에 있다가 사라지는 것을 볼 수 있다.
여기서 몇 가지 수정하면 다른 애니메이션을 구현할 수 있을 것이다. 지금은 fade-in, out으로 구현됨.
분명 여러 가지 시행착오 끝에 알아낸 건데 뭔가 설명할만한 것이 없다.
'개발 일기 > React' 카테고리의 다른 글
[React] axios 사용하기 #axios (0) | 2020.02.06 |
---|---|
[React] Material-ui로 디자인 하기 #@material-ui/core (0) | 2020.02.04 |
[React] Ant Design으로 Form 만들기 #antd (0) | 2020.01.23 |
[React] gsap 과 missing plugin? (0) | 2019.12.11 |
[ReactJS] crypto 비밀번호 암호화 하기 (0) | 2019.12.04 |