You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

framer-motion中AnimatePresence组件表现异常问题咨询

解决framer-motion中AnimatePresence组件同时显示两个元素的问题

快速点击按钮时,前一个元素的退出动画还未结束,新元素就已开始入场,导致两者同时显示。只需给AnimatePresence添加mode="wait"属性,让它等待前一个元素完全退出后再渲染新元素即可。

修改后的代码如下:

import { useState } from "react";
import { motion, AnimatePresence } from "framer-motion";

export default function App() {
  const [a, setA] = useState(true);
  return (
    <div className="max-w-sm mx-auto">
      <button onClick={() => setA((a) => !a)}>Button</button>
      {/* 添加mode="wait"属性 */}
      <AnimatePresence mode="wait">
        {a ? (
          <motion.div
            key="a"
            initial={{ x: -100, opacity: 0 }}
            animate={{ x: 0, opacity: 1 }}
            exit={{ x: -100, opacity: 0 }}
            transition={{ duration: 2 }}
          >
            A
          </motion.div>
        ) : (
          <motion.div
            key="b"
            initial={{ x: 100, opacity: 0 }}
            animate={{ x: 0, opacity: 1 }}
            exit={{ x: 100, opacity: 0 }}
            transition={{ duration: 2 }}
          >
            B
          </motion.div>
        )}
      </AnimatePresence>
    </div>
  );
}

修改后,每次切换都会等待当前元素的退出动画完全结束,才会启动新元素的入场动画,不会再出现两个元素同时显示的情况。

内容的提问来源于stack exchange,提问作者Martí Serra Molina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:12:37