이렇게 아름다운 애니메이션을 canvas 없이 쉽게 만들 수 있다!
기본적인 사용법은 다음과 같다.
import { useSpring, animated } from 'react-spring'
function App() {
const props = useSpring({ to: { opacity: 1 }, from: { opacity: 0 } })
return <animated.div style={props}>"I will fade in"</animated.div>
}
import { useSpring, animated } from 'react-spring'
animated
는 리액트 외부에서 애니메이션이 실행되도록 한다.(성능상의 이유라고 한다) 이 animated
는 animated.div
처럼 native element들을 extend하여 애니메이션값들을 props 의 형태로 받는다.
const props = useSpring({ to: { opacity: 1 }, from: { opacity: 0 } })
spring은 단순히 한 상태에서 다른 상태로 값을 animate한다. spring은 전달받는 모든 값들을 기억하며, "from"과 같은 예약어들이 있다. api에 대해서는 여기서 확인할 수 있다.
return <animated.div style={props}>I will fade in</animated.div>
이 부분에서 이제 위에서 만든 props
를 component에 전달해준다. 이미 div
, span
, svg
, h1
, ... 와 같은 포함하고 있으며, 만약 React component나 styled-component, 아니면 다른 플랫폼에서 쓰고 싶다면 아래와 같이 하면 된다.
// React components
const AnimatedDonut = animated(Donut)
// React-native
const AnimatedView = animated(View)
// styled-components, emotion, etc.
const AnimatedHeader = styled(animated.h1)`
...;
`
spring은 숫자뿐만 아니라 상당히 다양한 값들을 다룰 수 있다.
const props = useSpring({
vector: [0, 10, 30],
display: 'block',
padding: 20,
background: 'linear-gradient(to right, #009fff, #ec2f4b)',
transform: 'translate3d(0px,0,0) scale(1) rotateX(0deg)',
boxShadow: '0px 10px 20px 0px rgba(0,0,0,0.4)',
borderBottom: '10px solid #2D3747',
shape: 'M20,20 L20,380 L380,380 L380,20 L20,20 Z',
textShadow: '0px 5px 15px rgba(255,255,255,0.5)',
})