卸载组件上的 Framer-motion 退出动画

问题描述

我正在尝试使用 exit 属性在卸载我的组件时播放动画,但尽管存在 !

输入动画效果很好,但输出动画效果不佳!

我想我对我的描述的卸载管理不善,如果道具 data.show 为真,我会在单击项目时更改布尔值,简而言之,如果有人可以指出我...

codesandbox

提前致谢

解决方法

您的代码中有很多问题需要解决,建议您首先了解 React 中是什么触发了 re-rendering

通过在每次更改 prop 数据时创建一个新的 uuid 键,你破坏了 React 知道哪些组件需要再次渲染以便重新渲染它们的能力 - 所以它总是在 {{1 }} 并且 AnimatePresence 无法知道密钥发生了变化或安装发生了变化。在将函数传递给子组件时也可以使用 useCallback 钩子以避免重新渲染。

将状态向上移动到父级,在渲染之间将卡片密钥更新为一致的值,并且不要为了展开/折叠而更新整个道具数据。

查看更新的sandbox

我建议你不要像这样在同一个空间内内嵌多个项目,因为你总会让剩余的框跳一点,但这是另一个话题。