请参阅this codesandbox。
我有一个基本的框架运动动画,当切换时,长方体的高度是动画的。但是,我希望在默认情况下显示该框,但当页面加载时,会显示初始动画。
我的问题是,如果一个组件应该在挂载时显示,我如何避免它的初始动画,但仍然保持未来的进入和退出动画?谢谢!
发布于 2021-05-20 19:38:33
我想出了这样的解决方案,
1-我把变种带到了组件内部
2-我为不透明度和高度创建了两个状态
3-状态最初与设置动画的位置相同。所以当你第一次渲染的时候基本上什么都不会发生。
4-使用useEffect,可以将这些值与实际的初始值进行交换,以便在第一次渲染后,动画可以正常工作。
export const AnimatedFallback = ({ isVisible }) => {
const [opacity, setOpacity] = useState(1);
const [height, setHeight] = useState("200px");
const variants = {
initial: {
opacity: opacity,
height: height
},
enter: {
opacity: 1,
height: "200px",
transition: { duration: 0.5 }
},
exit: {
opacity: 0,
height: 0,
transition: { duration: 0.5 }
}
};
useEffect(()=> {
setHeight(0)
setOpacity(0)
}, [])
return (
<AnimatePresence>
{isVisible && (
<motion.div
animate="enter"
className="fallback"
exit="exit"
initial="initial"
variants={variants}
>
Suspense Fallback Component
</motion.div>
)}
</AnimatePresence>
);
};
https://stackoverflow.com/questions/67626851
复制