React过渡动画的具体使用

 更新时间:2026年06月25日 10:57:17   作者:kyrie28  
react-transition-group 是 React 官方维护的过渡动画库,专门用来给组件的挂载 / 卸载、显示 / 隐藏添加过渡效果,本文就来详细的介绍一下React过渡动画的使用,感兴趣的可以了解一下

react-transition-group react-transition-group 是 React 官方维护的过渡动画库,专门用来给组件的挂载 / 卸载、显示 / 隐藏添加过渡效果。

一、核心组件说明

react-transition-group 提供了 4 个核心组件,最常用的是 CSSTransition 和 TransitionGroup:

安装

npm install react-transition-group
组件用途
Transition基础组件,用 JS 控制过渡状态
CSSTransition基于 CSS 类名的过渡(最常用)
TransitionGroup管理一组元素的过渡,配合 CSSTransition 实现列表动画
SwitchTransition控制两个组件切换时的过渡

最常用:CSSTransition 示例(单元素过渡)

实现一个简单的淡入淡出效果:

1. 组件代码

import { useState } from 'react'; 
import { CSSTransition } from 'react-transition-group';
import './fade.css'; 
function FadeDemo() {
const [show, setShow] = useState(false); 
return ( 
<div>
<button onClick={() => setShow(!show)}> 
{show ? '隐藏' : '显示'}
</button> 
{/* in: 控制是否显示 timeout: 过渡持续时间(毫秒) classNames: 对应 CSS 类名前缀 unmountOnExit: 隐藏时卸载组件 */}
<CSSTransition
in={show}
timeout={300} 
classNames="fade"
unmountOnExit >
<div className="box">我是淡入淡出的盒子</div> 
</CSSTransition>
</div>
); }
export default FadeDemo;

2. 配套 CSS(fade.css)

CSSTransition 会自动给元素添加这些类名:

  • fade-enter:进入前
  • fade-enter-active:进入中
  • fade-enter-done:进入完成
  • fade-exit:离开前
  • fade-exit-active:离开中
  • fade-exit-done:离开完成
/* fade.css */
.box { 
width: 200px;
height: 200px;
background: #409eff;
color: white;
display: flex; 
align-items: center; 
justify-content: center; margin-top: 20px;
}
/* 进入前:透明度0,缩小 */
.fade-enter { 
opacity: 0;
transform: scale(0.8);
} 
/* 进入中:过渡动画 */ 
.fade-enter-active{
opacity: 1; 
transform: scale(1);
transition: all 300ms 
ease-in-out;
} 
/* 离开前:保持当前状态 */
.fade-exit {
opacity: 1;
transform: scale(1);
} 
/* 离开中:过渡到隐藏状态 */ 
.fade-exit-active {
opacity: 0;
transform: scale(0.8); 
transition: all 300ms ease-in-out; }

进阶:TransitionGroup 实现列表动画

实现一个列表添加 / 删除时的动画效果:

1. 组件代码

import { useState } from 'react';
import { CSSTransition, TransitionGroup } from 'react-transition-group';
import './list.css'; 
function ListDemo() { 
const [items, setItems] = useState([
{ id: 1, text: '列表项1' },
{ id: 2, text: '列表项2' }, 
{ id: 3, text: '列表项3' } 
]); 
const addItem = () => { 
const newId = Math.max(...items.map(i => i.id)) + 1;
setItems([...items, { id: newId, text: `列表项${newId}` }]); }; 
const removeItem = (id) => { 
setItems(items.filter(item => item.id !== id)); 
};
return ( 
<div> 
<button onClick={addItem}>添加列表项</button> 
{/* TransitionGroup 包裹整个列表,管理所有子项的过渡 */}
<TransitionGroup className="list">
{items.map(item => ( 
<CSSTransition key={item.id} 
timeout={300} 
classNames="list-item"
>
<div className="list-item">
{item.text}
<button onClick={() => removeItem(item.id)}>删除</button> </div> </CSSTransition> ))} </TransitionGroup> 
</div> ); } 
export default ListDemo;

  1. 配套 CSS(list.css)
/* list.css */ 
.list { margin-top: 20px; } 
.list-item { display: flex; justify-content: space-between; align-items: center; padding: 10px; background: #f0f0f0; margin-bottom: 8px; border-radius: 4px; }
/* 进入动画:从下方滑入并淡入 */
.list-item-enter { opacity: 0; transform: translateY(20px); } 
.list-item-enter-active { opacity: 1; transform: translateY(0); transition: all 300ms ease-out; } 
/* 离开动画:向上滑出并淡出 */ 
.list-item-exit { opacity: 1; transform: translateY(0); } 
.list-item-exit-active { opacity: 0; transform: translateY(-20px); transition: all 300ms ease-in; 
}

常用属性说明

CSSTransition 常用属性

属性作用
in控制组件是否显示(true/false)
timeout过渡持续时间(毫秒),和 CSS 动画时长保持一致
classNamesCSS 类名前缀,比如 classNames="fade" 会生成 fade-enter 等类名
unmountOnExit动画结束后卸载组件(隐藏时不占空间)
appear组件首次挂载时也执行进入动画
onEnter / onEntered / onExit / onExited过渡阶段的钩子函数

TransitionGroup 注意事项

  • 子项必须设置唯一的 key,否则动画会出错
  • 每个子项都要包裹 CSSTransition 才能触发过渡
  • 可以通过 component 属性指定包裹的标签(默认是 div)

到此这篇关于React过渡动画的具体使用的文章就介绍到这了,更多相关React过渡动画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • react循环数据(列表)的实现

    react循环数据(列表)的实现

    这篇文章主要介绍了react循环数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • react中的DOM操作实现

    react中的DOM操作实现

    某些情况下需要在典型数据流外强制修改子代。要修改的子代可以是 React 组件实例,也可以是 DOM 元素。这时就要用到refs来操作DOM,本文详细的介绍一下使用,感兴趣的可以了解一下
    2021-06-06
  • React开发进阶redux saga使用原理详解

    React开发进阶redux saga使用原理详解

    这篇文章主要为大家介绍了React开发进阶redux saga使用原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 在React中用canvas对图片标注的实现

    在React中用canvas对图片标注的实现

    本文主要介绍了在React中用canvas对图片标注的实现 ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • React更新组件状态的常用方法

    React更新组件状态的常用方法

    React是一个用于构建用户界面的JavaScript库,广泛应用于开发现代单页应用(SPA),在 React 中,状态管理是一个关键概念,因为它直接影响到组件的渲染和用户体验,本文将深入探讨 React 中如何更新组件状态,需要的朋友可以参考下
    2025-06-06
  • 使用Axios在React中请求数据的方法详解

    使用Axios在React中请求数据的方法详解

    这篇文章主要给大家介绍了初学React,如何规范的在react中请求数据,主要介绍了使用axios进行简单的数据获取,加入状态变量,优化交互体验,自定义hook进行数据获取和使用useReducer改造请求,本文主要适合于刚接触React的初学者以及不知道如何规范的在React中获取数据的人
    2023-09-09
  • ReactNative错误采集原理在Android中实现详解

    ReactNative错误采集原理在Android中实现详解

    这篇文章主要为大家介绍了ReactNative错误采集原理在Android中实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • React组件中使用JSON数据文件的方法详解

    React组件中使用JSON数据文件的方法详解

    要在 React 组件中使用 JSON 数据,有多种方法,这篇文章主要为大家详细介绍了五个常见的方法,文中的示例代码讲解详细,有需要的小伙伴可以了解下
    2024-01-01
  • React useEffect的理解与使用

    React useEffect的理解与使用

    这篇文章主要介绍了React useEffect的理解与使用,帮助大家更好的理解和学习使用React,感兴趣的朋友可以了解下
    2021-04-04
  • React Fiber构建beginWork源码解析

    React Fiber构建beginWork源码解析

    这篇文章主要为大家介绍了React Fiber构建beginWork源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02

最新评论