Framer Motion 的 exit 动画为什么不生效?
我用 Framer Motion 做了个列表,点击删除项时想加个淡出动画,但 exit 动画完全没反应。明明已经给父容器加了 layout 和 AnimatePresence,也确保 key 是唯一的,咋回事?
这是我的代码:
import { motion, AnimatePresence } from 'framer-motion';
function ItemList({ items, onDelete }) {
return (
<AnimatePresence>
{items.map(item => (
<motion.div
key={item.id}
initial={{ opacity: 1 }}
exit={{ opacity: 0 }}
onClick={() => onDelete(item.id)}
>
{item.name}
</motion.div>
))}
</AnimatePresence>
);
}
AnimatePresence的位置放错了。你的items数组变化时,整个ItemList组件都会重新渲染,导致AnimatePresence也被重建了,exit动画自然就没了。WP里面碰到这种问题,得把
AnimatePresence提到组件最外层。改成这样:如果还是不行,可能是你的React版本问题,确保在18+版本里用
AnimatePresence时要开启Strict Mode。老版本的话得用老式写法,不过现在应该没人用那么旧的React了吧...