【前端知识】React 基础巩固(二十九)——过渡动画 react-transition-group

这篇具有很好参考价值的文章主要介绍了【前端知识】React 基础巩固(二十九)——过渡动画 react-transition-group。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React 基础巩固(二十九)——过渡动画 react-transition-group

过渡动画 react-transition-group

react-transition-group 包含:

  1. Transition(该组件是一个和平台无关的组件,不一定结合 CSS)
  2. CSSTransition(通常使用此组件实现过渡动画效果)
  3. SwitchTransition(两个组件显示/隐藏切换时使用)
  4. TransitionGroup(将多个动画包裹其中,一般用于列表中元素的动画)

CSSTransition

  • CSSTransition 基于 Transition 组件构建

  • CSSTransition 执行过程中,有三个状态:appearenterexit

  • 它们有三种状态,需要定义对应的 CSS 样式

    • 开始状态:-apper,-enter,exit
    • 执行动画:-appear-active,-enter-active,-exit-active
    • 执行结束:-appear-done,-enter-done,-exit-done
  • 常见属性

    • in: 触发进入或者退出状态
    • className: 动画 class 的名称
    • timeout: 过渡动画的时间
    • appear: 是否在初次进入添加动画(需要和 in 同时为 true)
    • unmountOnExit: 退出后卸载组件
  • 钩子函数

    • onEnter: 在进入动画之前被触发
    • onEntering: 在应用进入动画时被触发
    • onEntered: 在应用进入动画结束后被触发
  • 基本使用

import React, { PureComponent } from "react";
import { CSSTransition } from "react-transition-group";
import "./style.css";

export class App extends PureComponent {
  constructor() {
    super();

    this.state = {
      isShowTitle: true,
    };
  }
  render() {
    const { isShowTitle } = this.state;

    return (
      <div>
        <button
          onClick={(e) =>
            this.setState({
              isShowTitle: !isShowTitle,
            })
          }
        >
          change
        </button>
        <CSSTransition
          in={isShowTitle}
          classNames="csst"
          timeout={2000}
          unmountOnExit={true}
          appear
          onEnter={(e) => console.log("on enter")}
          onEntering={(e) => console.log("on entering")}
          onEntered={(e) => console.log("on entered")}
          onExit={(e) => console.log("on exit")}
          onExiting={(e) => console.log("on exiting")}
          onExited={(e) => console.log("on exited")}
        >
          <h2>App</h2>
        </CSSTransition>
      </div>
    );
  }
}

export default App;
.csst-apear {
  transform: translateX(-150px);
}

.csst-apear-active {
  transform: translateX(0);
  transition: transform 2s ease;
}

.csst-apear .csst-enter {
  opacity: 0;
}

.csst-apear-active .csst-enter-active {
  opacity: 1;
  transition: opacity 2s ease;
}

.csst-exit {
  opacity: 1;
}

.csst-exit-active {
  opacity: 0;
  transition: opacity 2s ease;
}

SwitchTransition

    • 常见属性
    • mode
      • in-out: 新组件先进入,旧组件再移除
      • out-in: 旧组件先移除,新组件再进入
  • 基本使用文章来源地址https://www.toymoban.com/news/detail-575940.html

import React, { PureComponent } from "react";
import { SwitchTransition, CSSTransition } from "react-transition-group";
import "./style.css";

export class App extends PureComponent {
  constructor() {
    super();

    this.state = {
      isLogin: true,
    };
  }

  render() {
    const { isLogin } = this.state;
    return (
      <div>
        <SwitchTransition mode="out-in">
          <CSSTransition
            key={isLogin ? "exit" : "login"}
            classNames="login"
            timeout={1000}
          >
            <button
              onClick={(e) =>
                this.setState({
                  isLogin: !isLogin,
                })
              }
            >
              {isLogin ? "退出" : "登录"}
            </button>
          </CSSTransition>
        </SwitchTransition>
      </div>
    );
  }
}

export default App;
.login-enter {
  transform: translateX(100px);
  opacity: 0;
}

.login-enter-active {
  transform: translateX(0);
  opacity: 1;
  transition: all 1s ease;
}

.login-exit {
  transform: translateX(0);
  opacity: 1;
}

.login-exit-active {
  transform: translateX(-100px);
  opacity: 0;
  transition: all 1s ease;
}

TransitionGroup

  • 基本使用
import React, { PureComponent } from "react";
import { CSSTransition, TransitionGroup } from "react-transition-group";
import "./style.css";

export class App extends PureComponent {
  constructor() {
    super();
    this.state = {
      books: [
        { id: 1, name: "book1", price: 123, count: 99 },
        { id: 2, name: "book2", price: 223, count: 99 },
        { id: 3, name: "book3", price: 323, count: 99 },
        { id: 4, name: "book4", price: 423, count: 99 },
        { id: 5, name: "book5", price: 523, count: 99 },
      ],
    };
  }

  addNewBook() {
    const books = [...this.state.books];
    books.push({
      id: new Date().getTime(),
      name: "book6",
      price: 111,
      count: 99,
    });
    this.setState({
      books,
    });
  }

  delBook(index) {
    const books = [...this.state.books];
    books.splice(index, 1);
    this.setState({
      books,
    });
  }

  render() {
    const { books } = this.state;
    return (
      <div>
        <h2>书籍列表</h2>
        <TransitionGroup component="ul">
          {books.map((item, index) => {
            return (
              <CSSTransition key={item.id} classNames="book" timeout={1000}>
                <li>
                  <span>
                    {item.name} - {item.price}
                  </span>
                  <button onClick={(e) => this.delBook(index)}>删除书籍</button>
                </li>
              </CSSTransition>
            );
          })}
        </TransitionGroup>
        <button onClick={(e) => this.addNewBook()}>添加新书籍</button>
      </div>
    );
  }
}

export default App;

到了这里,关于【前端知识】React 基础巩固(二十九)——过渡动画 react-transition-group的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端知识】React 基础巩固(二十六)——Portals 的使用

    通常,组件会渲染到 root 节点下。可使用 Portals 将组件渲染至其他节点。 添加 id 为 more、modal 的 div 元素 构建 Modal.jsx, 通过 createPortal 把组件渲染到指定的 modal 节点下 构建 App.jsx 查看渲染结果

    2024年02月16日
    浏览(36)
  • 【前端知识】React 基础巩固(二十三)——React 性能优化 SCU相关

    React 的渲染流程 JSX - 虚拟 DOM - 真实 DOM React 的更新流程 props/state 改变 - render函数重新执行 - 产生新的DOM树 - 新旧DOM树进行diff - 计算出差异进行更新 - 更新到真实的DOM React 在 props 或 state 发生改变时,会调用 React 的 render 方法,会创建一颗不同的树 React 需要基于这两颗不同的

    2024年02月15日
    浏览(52)
  • 【前端知识】React 基础巩固(十三)——列表渲染

    在 React 中没有像 Vue 模块语法中的 v-for 指令,而是需要我们通过 JS 代码的方式组织数据,转成 JSX 在 React 中,展示列表最多的方式就是使用数组的 map 高阶函数 在展示数组前,有时会进行一些处理 过滤一些内容(filter 函数) 截取数组中的一部分内容(slice 函数) 列表中的

    2024年02月10日
    浏览(41)
  • 【前端知识】React 基础巩固(四十)——Navigate导航

    新建Login页面,在Login中引入Navigate,实现点击登陆按钮跳转至 /home 路径下: 当路由均无匹配时,通过Navigate跳转至NotFound界面,其中 * 为通配符: 构建NotFound.jsx 在App.jsx中配置NotFound: 构建Home的子路由页面: HomeRecommend.jsx HomeRanking.jsx 利用 Route 嵌套子路由,实现Home页面下的

    2024年02月14日
    浏览(51)
  • 【前端知识】React基础巩固(二)——JSX注意点

    createElement存在的问题: 繁琐不简洁 不直观,无法一眼看出所描述的结构 不优雅,开发体验不好 JSX 简介:JSX 是 JavaScript XML 的简写,表示了在JS代码中写XML(HTML)格式的代码 优势:声明式语法更加直观,与HTML结构相同,降低学习成本,提高开发效率 JSX 是 react 的核心内容‘

    2024年02月09日
    浏览(60)
  • 【前端知识】React 基础巩固(四十二)——React Hooks的介绍

    Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。 class组件 VS 函数式组件: class的优势: class组件可以定义自己的state,用来保存组件自己内部的状态;而函数式组件不可以,因为函数每次调用都会产生新的临时

    2024年02月14日
    浏览(49)
  • 【前端知识】React 基础巩固(三十一)——Redux的简介

    概念 纯函数(确定的输入一定产生确定的输出,函数在执行过程中不产生副作用): 在程序设计中,若一个函数符合以下条件,那么这个函数就被称为纯函数 此函数在相同的输入值时,需产生相同的输出 函数的输出和输入值以外的其他隐藏信息或状态无关,也和由I/O设备产

    2024年02月16日
    浏览(39)
  • 【前端知识】React 基础巩固(七)——JSX 的基本语法

    JSX 是一种 JS 的语法扩展(extension),也可以称之为 JavaScript XML,因为看起来就是一段 XML 语法 它用于描述我们的 UI 界面,并且其可以和 JS 融合在一起使用 它不同于 Vue 中的模块语法,不需要专门学习模块语法中的指令 React 认为 渲染逻辑 本质上与 其他UI逻辑 存在内在耦合

    2024年02月10日
    浏览(43)
  • 【前端知识】React 基础巩固(四十三)——Effect Hook

    Effect Hook 用来完成一些类似class中生命周期的功能。 在使用类组件时,不管是渲染、网路请求还是操作DOM,其逻辑和代码是杂糅在一起的。例如我们希望把计数器结果显示在标签上,在类组件中,我们通过生命周期进行实现,如下所示: 在函数组件中,我们可以利用useEffec

    2024年02月14日
    浏览(52)
  • 【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)

    Redux Tool Kit (RTK)是官方推荐的编写Redux逻辑的方法,旨在成为编写Redux逻辑的标准方式,从而解决上面提到的问题。 RTK的核心API主要有如下几个: configureStore:包装createStore以提供简化的配置选项和良好的默认值。它可以自动组合你的slice reducer,添加你提供的任何Redux中间件

    2024年02月15日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包