본문 바로가기

react

react-toastify - custom toast 적용하기

toast가 필요한데, 얕은 지식으로 직접 만들지는 못했고 react-toastify 라이브러리를 사용했다.

이때 자체 제작한 component 를 사용해보자

 

install

yarn add react-toastify

 

ToastContainer 적용

import { ToastContainer } from 'react-toastify';

import 'style/toast.css';

function MyApp({ Component, pageProps }: AppProps) {
  return (
    <>
      <Component {...pageProps} />
      <ToastContainer limit={1} />
    </>
  );
}

export default MyApp;

toast 하나만 띄울거라서 limit 1로 걸어줬다.

react-toastify에서 toast를 위한 css를 제공해 주는데, 거기에서 필요한 값부분만 가져와서 style/toast.css에 적용했다.

 

이렇게 하면 html 에 다음과 같이 적용이 된다.

toast 를 띄우게 되면 저 div안에 toast component가 들어간다.

 

toast.css

.Toastify--animate {
    animation-fill-mode: both;
    animation-duration: 0.7s;
}

.Toastify--animate-icon {
    animation-fill-mode: both;
    animation-duration: 0.3s;
}

@media only screen and (max-width : 480px) {
    .Toastify__toast {
        margin-bottom: 0;
        border-radius: 0;
    }
}
@keyframes Toastify__trackProgress {
    0% {
        transform: scaleX(1);
    }
    100% {
        transform: scaleX(0);
    }
}

.Toastify__progress-bar--animated {
    animation: Toastify__trackProgress linear 1 forwards;
}

@keyframes Toastify__bounceOut {
    to {
        opacity: 0;
    }
}
@keyframes Toastify__bounceIn {
    to {
        opacity: 1;
    }
}

.Toastify__bounce-enter--top-right, .Toastify__bounce-enter--bottom-right {
    animation-name: Toastify__bounceIn;
}

.Toastify__bounce-exit--top-right, .Toastify__bounce-exit--bottom-right {
    animation-name: Toastify__bounceOut;
}
import 'react-toastify/dist/ReactToastify.css'; 이 파일에 있는 값들을 참고해서 내가 필요한 부분만 적용함.

기존 ReactToastify.css 에는 컬러나 크기 뿐만아니라

toast가 좌에서 우로, 우에서 좌로 등 toast자체가 움직이게 하는 애니메이션이 적용되어 있다.

나의 경우 단순히 뜨고 사라지는걸 원해서 opacity만 적용했다. 그리고 불필요한 css 부분은 다 제거함!

 

 

toast.tsx

import { toast } from 'react-toastify';

const ToastComponent = () => (
  <div>
    blabla~~
  </div>
);

export const Toast = () => toast(<ToastComponent />, { autoClose: 2000, hideProgressBar: true, progress: undefined });

 

submit을 하거나 한뒤 toast 를 띄우고 싶을때  

Toast(); 

로 사용하면 된다.

 

반응형

'react' 카테고리의 다른 글

big integer 를 응답으로 받아보자  (0) 2022.07.26
next.js http header 적용하기  (0) 2022.07.15
emotion in next.js + typescript  (1) 2022.05.06
nextjs deployment with 644 permission  (0) 2022.01.01
react-date-range with useRef  (0) 2022.01.01