使用 React-spring 为有条件渲染的组件设置动画的问题

Issues on animating a conditionally rendered component using React-spring

我是 react-spring 的新手。每当组件卸载时,我都无法为其设置动画。我有一个带有 onClick 处理程序的简单卡片,负责有条件地显示我的 Overlay 组件。安装时动画工作正常(从&输入工作),但是当关闭覆盖时,组件只是消失而没有动画(离开不起作用)。我怀疑这是因为组件的条件渲染,但我一直在努力寻找解决方案。如有任何帮助,我们将不胜感激!

我现在的代码: https://codesandbox.io/s/dry-leftpad-h3vmv
我想要实现的目标: https://codesandbox.io/s/048079xzw

P.S。后者使用 mauerwerk 的库。我不想用那个。

你错过的是:

return expand.map(({ item, props, key }) => (
  item && <animated.div
  // ...etc

当您使用 useTransition 控制单个组件的安装时,您需要根据传递的 item 有条件地渲染它。在你的情况下,当它是 false 时它不会渲染(如果已经安装它将卸载)并且当它是 true 时它将呈现(如果卸载则安装)。

这是一个从你的沙箱中派生出来的工作沙箱:https://codesandbox.io/s/infallible-agnesi-cty5g

多一点信息

useTransition 的第一个参数是您要转换的列表。它会监视变化并发回一个与每个项目映射的数组、一个键和一个基于项目是真(进入)还是假(离开)的样式对象 (props)。因此,对于 mounts/unmounts 单个元素的过渡,基于项目真实性的条件渲染是关键。

查看 the examples again here,您会看到转换列表、两个元素之间的切换和单个项目之间的区别。

对于列表,不需要检查项目是否存在,因为数组改变了。

为了在两个元素之间切换,您使用 item 的真实性来确定要呈现哪个元素。

对于单个元素,item 决定是否渲染。这意味着当您默认为 false 时它最初不会挂载,并且将确保您不会在 isActive 值更改时呈现 2 个项目。