css
.ani-fadeIn{animation: fadeIn .5s ease-in-out both;}
@keyframes fadeIn {0%{opacity: 0;}100%{opacity: 1;}}
.ani-fadeOut{animation: fadeOut .5s linear both;}
@keyframes fadeOut {0%{opacity: 1;}100%{opacity: 0;}}
组件
function Example(){
const [nextStep,setNextStep] = useState(false)
const [aniType,setAniType] = useState(false)
return(
<>
<button onClick={()=>setNextStep(true)}>显示</button>
{
nextStep &&
<>
<button onClick={() => setAniType(true)}>隐藏</button>
<div
className={aniType ? 'ani-fadeOut': 'ani-fadeIn'}
onAnimationEnd={(e) => {
if (e.animationName == "fadeOut") {
setNextStep(false);
setAniType(false);
}
}}
>123</div>
</>
}
</>
)
}
如上代码是我写的效果,有没有更好的写法
(可以的话,最好不要用库,例如react-transition-group)
不想用库的话,你可以自定义Hook来管理动画类名: