在我尝试在React中创建可重用的动画HOC时,我遇到了一个渲染退出动画的问题。似乎AimatePresence没有注册退出动画,而React只是从DOM中删除组件,而没有渲染退出动画。
HOC的代码
const withDropdown = (Component: React.ComponentType) => (props: InfoProps) =>
(
<div className="">
<button> ... button element controls state </button>
<AnimatePresence>
{props.collapsed && (
<motion.div
key="modal"
className="overflow-hidden"
initial={{ height: "auto"}}
animate={{ height: "auto" }}
exit={{ height: 0 }}
>
<Component />
</motion.div>
)}
</AnimatePresence>
</div>
);
组件代码
const someInfo = () => {
return (
<motion.div className="flex flex-col">
<p>Some Info </p>
</motion.div>
);
};
主组件内的代码
const [showThis, setShowThis] = useState(false);
const InfoWithDropDown = withDropdown(someInfo);
联合安全部队
<InfoWithDropDown
collapsed={showThis}
collapsedSetter={setShowThis}
/>
1条答案
按热度按时间ux6nzvsh1#
经过一些尝试和错误后,很容易就解决了这个问题。
解决方案是让组件管理自己的状态,而不是向下传递状态和setter。
HOC的新代码如下所示: