FadeIn.tsx 778 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import React, { SFC } from 'react';
  2. import Transition from 'react-transition-group/Transition';
  3. interface Props {
  4. duration: number;
  5. children: JSX.Element;
  6. in: boolean;
  7. }
  8. export const FadeIn: SFC<Props> = props => {
  9. const defaultStyle = {
  10. transition: `opacity ${props.duration}ms linear`,
  11. opacity: 0,
  12. };
  13. const transitionStyles = {
  14. exited: { opacity: 0, display: 'none' },
  15. entering: { opacity: 0 },
  16. entered: { opacity: 1 },
  17. exiting: { opacity: 0 },
  18. };
  19. return (
  20. <Transition in={props.in} timeout={props.duration}>
  21. {state => (
  22. <div
  23. style={{
  24. ...defaultStyle,
  25. ...transitionStyles[state],
  26. }}
  27. >
  28. {props.children}
  29. </div>
  30. )}
  31. </Transition>
  32. );
  33. };