React Transition Group이 공식 라이브러리라고 하여 사용해보았다.
npm install react-transition-group --save
_app.tsx
function MyApp({ Component, pageProps }: AppProps) {
return (
<>
<Header />
<GlobalStyle />
<AppLayout>
<Component {...pageProps} />
</AppLayout>
<Footer />
</>
);
}
export default MyApp;
Component 부분을 AppLayout 태그로 감싸준다.
AppLayout.tsx
import React, { ReactNode } from "react";
import { Transition, TransitionGroup } from "react-transition-group";
import { useRouter } from "next/router";
interface Props {
children: ReactNode;
}
const TIMEOUT = 200;
const getTransitionStyles: any = {
entering: {
position: "absolute",
opacity: 0,
},
entered: {
transition: `opacity ${TIMEOUT}ms ease-in-out, transform ${TIMEOUT}ms ease-in-out`,
opacity: 1,
},
exiting: {
transition: `opacity ${TIMEOUT}ms ease-in-out, transform ${TIMEOUT}ms ease-in-out`,
opacity: 0,
},
};
const AppLayout = ({ children }: Props) => {
const router = useRouter();
return (
<TransitionGroup style={{ position: "relative" }}>
<Transition
key={router.pathname}
timeout={{
enter: TIMEOUT,
exit: TIMEOUT,
}}
>
{(status) => (
<div
style={{
...getTransitionStyles[status],
}}
>
{children}
</div>
)}
</Transition>
</TransitionGroup>
);
};
export default AppLayout;
이렇게 주면 모든 페이지 이동 시 fade-in-out 애니메이션이 보여지게 된다.
페이지별로 다른 애니메이션을 주고싶다면 각각의 페이지 컴포넌트 최상위단에 Transition을 씌워주면 된다..
'main > Next.js' 카테고리의 다른 글
[Next.js] OG Tag 적용 오류 문제 해결 (1) | 2022.06.14 |
---|---|
[Next.js] SEO를 위한 SSR 시도 - 페이지별og태그 적용기 (0) | 2022.01.19 |
[React | Next.js] TOAST UI Editor 사용하기 (0) | 2022.01.10 |
[Next.js] 기존 React 프로젝트 Next.js로 바꾸기 - 3 (TS, Styled-Component, SVG) (0) | 2021.12.22 |
[Next.js] 기존 React 프로젝트 Next.js로 바꾸기 - 2 (공통 페이지) (0) | 2021.11.29 |