styled-component + react-transition-group = 매우 간단한 전환
12055 단어 reactjavascript
반면에 react-transition-group은 너무 간단합니다.
styled-componets
를 사용하면 <Transition>
구성 요소가 <CSSTransition>
보다 나을 수 있습니다.예시
먼저 전환 래핑 구성 요소를 만듭니다.
이 예제에서는 React Hooks를 사용하지만 필요한 경우 클래스 구성 요소를 사용할 수 있습니다.
import { Transition } from "react-transition-group"
import { Animation } from "./Animation"
export const AnimateItem = () => {
const [animate, setAnimate] = useState(false)
// Animate on click button and revert after 3000ms.
const doAnimate = useCallback(() => {
setAnimate(true)
setTimeout(() => {
setAnimate(false)
}, 3000)
}, [])
return (
<div>
{/* Transition change state with `in` props */}
<Transition in={animate} timeout={500}>
{(state) => (
// state change: exited -> entering -> entered -> exiting -> exited
<Animation state={state}>Hello</Animation>
)}
</Transition>
<button onClick={doAnimate}>Animate</button>
</div>
)
}
다음으로 styled-component를 기반으로 구성 요소를 만듭니다.
// Animation.js
import styled from "styled-components"
export const Animation = styled.div`
transition: 0.5s;
width: 300px;
height: 200px;
/* example for move item */
transform: translateX(
${({ state }) => (state === "entering" || state === "entered" ? 400 : 0)}px
);
/* change color*/
background: ${({ state }) => {
switch (state) {
case "entering":
return "red"
case "entered":
return "blue"
case "exiting":
return "green"
case "exited":
return "yellow"
}
}};
`
Item
및 Animation
도 분할할 수 있습니다.
const BaseItem = styled.div`
width: 300px;
height: 200px;
`
export const Animation = styled(BaseItem)`
transition: 0.5s;
transform: translateX(
${({ state }) => (state === "entering" || state === "entered" ? 400 : 0)}px
);
`
시사
페이드 예시
같은 방법으로 fadeIn/fadeOut 애니메이션을 만들 수 있습니다.
export const Fade = styled.div`
transition: 0.5s;
opacity: ${({ state }) => (state === "entered" ? 1 : 0)};
display: ${({ state }) => (state === "exited" ? "none" : "block")};
`
또는 unmountOnExit
및 mountOnEnter
와 함께 사용할 수 있습니다.
export const Fade2 = styled.div`
transition: 5s;
opacity: ${({ state }) => (state === "entered" ? 1 : 0)};
`
const Item = () => {
// ...
return <Transition in={animate} timeout={500} unmountOnExit mountOnEnter>
{(state) => <Fade2 state={state}>Fade In</Fade2>}
</Transition>
}
Reference
이 문제에 관하여(styled-component + react-transition-group = 매우 간단한 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/terrierscript/styled-component--react-transition-group--very-simple-transition-jja
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import { Transition } from "react-transition-group"
import { Animation } from "./Animation"
export const AnimateItem = () => {
const [animate, setAnimate] = useState(false)
// Animate on click button and revert after 3000ms.
const doAnimate = useCallback(() => {
setAnimate(true)
setTimeout(() => {
setAnimate(false)
}, 3000)
}, [])
return (
<div>
{/* Transition change state with `in` props */}
<Transition in={animate} timeout={500}>
{(state) => (
// state change: exited -> entering -> entered -> exiting -> exited
<Animation state={state}>Hello</Animation>
)}
</Transition>
<button onClick={doAnimate}>Animate</button>
</div>
)
}
// Animation.js
import styled from "styled-components"
export const Animation = styled.div`
transition: 0.5s;
width: 300px;
height: 200px;
/* example for move item */
transform: translateX(
${({ state }) => (state === "entering" || state === "entered" ? 400 : 0)}px
);
/* change color*/
background: ${({ state }) => {
switch (state) {
case "entering":
return "red"
case "entered":
return "blue"
case "exiting":
return "green"
case "exited":
return "yellow"
}
}};
`
const BaseItem = styled.div`
width: 300px;
height: 200px;
`
export const Animation = styled(BaseItem)`
transition: 0.5s;
transform: translateX(
${({ state }) => (state === "entering" || state === "entered" ? 400 : 0)}px
);
`
페이드 예시
같은 방법으로 fadeIn/fadeOut 애니메이션을 만들 수 있습니다.
export const Fade = styled.div`
transition: 0.5s;
opacity: ${({ state }) => (state === "entered" ? 1 : 0)};
display: ${({ state }) => (state === "exited" ? "none" : "block")};
`
또는 unmountOnExit
및 mountOnEnter
와 함께 사용할 수 있습니다.
export const Fade2 = styled.div`
transition: 5s;
opacity: ${({ state }) => (state === "entered" ? 1 : 0)};
`
const Item = () => {
// ...
return <Transition in={animate} timeout={500} unmountOnExit mountOnEnter>
{(state) => <Fade2 state={state}>Fade In</Fade2>}
</Transition>
}
Reference
이 문제에 관하여(styled-component + react-transition-group = 매우 간단한 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/terrierscript/styled-component--react-transition-group--very-simple-transition-jja
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
export const Fade = styled.div`
transition: 0.5s;
opacity: ${({ state }) => (state === "entered" ? 1 : 0)};
display: ${({ state }) => (state === "exited" ? "none" : "block")};
`
export const Fade2 = styled.div`
transition: 5s;
opacity: ${({ state }) => (state === "entered" ? 1 : 0)};
`
const Item = () => {
// ...
return <Transition in={animate} timeout={500} unmountOnExit mountOnEnter>
{(state) => <Fade2 state={state}>Fade In</Fade2>}
</Transition>
}
Reference
이 문제에 관하여(styled-component + react-transition-group = 매우 간단한 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/terrierscript/styled-component--react-transition-group--very-simple-transition-jja텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)