当前位置:首页 > React

react实现卸载动画

2026-01-26 10:59:09React

使用 CSS 和 React 实现卸载动画

在 React 中实现卸载动画,可以通过结合 CSS 动画和 React 的生命周期方法或 Hooks 来完成。以下是几种常见的方法:

使用 CSS Transition 和 React 状态

定义一个 CSS 类,包含过渡效果:

.fade-exit {
  opacity: 1;
}
.fade-exit-active {
  opacity: 0;
  transition: opacity 300ms ease-out;
}

在 React 组件中,通过状态控制卸载动画:

import { useState } from 'react';

function AnimatedComponent() {
  const [isVisible, setIsVisible] = useState(true);

  return (
    <div>
      {isVisible && (
        <div className="fade-exit fade-exit-active">
          Content to animate out
        </div>
      )}
      <button onClick={() => setIsVisible(false)}>
        Trigger Unmount Animation
      </button>
    </div>
  );
}

使用 React Transition Group

React Transition Group 是一个流行的库,专门用于管理组件的进入和退出动画。

安装 React Transition Group:

npm install react-transition-group

使用 CSSTransition 组件:

import { CSSTransition } from 'react-transition-group';
import { useState } from 'react';

function AnimatedComponent() {
  const [show, setShow] = useState(true);

  return (
    <div>
      <CSSTransition
        in={show}
        timeout={300}
        classNames="fade"
        unmountOnExit
      >
        <div>Content to animate out</div>
      </CSSTransition>
      <button onClick={() => setShow(false)}>
        Trigger Unmount Animation
      </button>
    </div>
  );
}

对应的 CSS:

.fade-enter {
  opacity: 0;
}
.fade-enter-active {
  opacity: 1;
  transition: opacity 300ms;
}
.fade-exit {
  opacity: 1;
}
.fade-exit-active {
  opacity: 0;
  transition: opacity 300ms;
}

使用 Framer Motion

Framer Motion 是一个更高级的动画库,提供更丰富的动画功能。

安装 Framer Motion:

npm install framer-motion

实现卸载动画:

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

function AnimatedComponent() {
  const [show, setShow] = useState(true);

  return (
    <div>
      <AnimatePresence>
        {show && (
          <motion.div
            initial={{ opacity: 1 }}
            exit={{ opacity: 0 }}
            transition={{ duration: 0.3 }}
          >
            Content to animate out
          </motion.div>
        )}
      </AnimatePresence>
      <button onClick={() => setShow(false)}>
        Trigger Unmount Animation
      </button>
    </div>
  );
}

自定义 Hook 实现卸载动画

创建一个自定义 Hook 来处理动画逻辑:

import { useState, useEffect } from 'react';

function useUnmountAnimation(duration = 300) {
  const [isMounted, setIsMounted] = useState(true);
  const [shouldRender, setShouldRender] = useState(true);

  useEffect(() => {
    if (!isMounted) {
      const timer = setTimeout(() => {
        setShouldRender(false);
      }, duration);
      return () => clearTimeout(timer);
    }
  }, [isMounted, duration]);

  return [shouldRender, setIsMounted];
}

function AnimatedComponent() {
  const [shouldRender, setIsMounted] = useUnmountAnimation();

  return (
    <div>
      {shouldRender && (
        <div className={!isMounted ? 'fade-out' : ''}>
          Content to animate out
        </div>
      )}
      <button onClick={() => setIsMounted(false)}>
        Trigger Unmount Animation
      </button>
    </div>
  );
}

对应的 CSS:

react实现卸载动画

.fade-out {
  animation: fadeOut 0.3s ease-out forwards;
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

以上方法可以根据项目需求和技术栈选择合适的实现方式。React Transition Group 和 Framer Motion 提供了更完整的解决方案,而自定义 CSS 和 Hooks 则更适合简单的动画需求。

标签: 动画react
分享给朋友:

相关文章

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 项目依赖 Node.js 环境,需先安装 Node.js(自带 npm)。访问 Node.js 官网 下载 LTS 版本,运行安装程序并完成配置。安装后,…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react-…

typescript react 如何

typescript react 如何

TypeScript 与 React 结合使用的方法 在 React 项目中使用 TypeScript 可以提升代码的可维护性和类型安全性。以下是一些关键步骤和最佳实践: 安装 TypeScript…

jquery动画

jquery动画

jQuery动画基础 jQuery提供了多种动画方法,用于创建平滑的过渡效果。常用的动画方法包括animate()、fadeIn()、fadeOut()、slideUp()和slideDown()。…