探索 React 动画的世界:简介

构建应用程序时,动画善整体用户体验方法,因为它们允许应用程序用户之间进行更好的交互

在我们之前的一些 React 教程中,您熟悉基本的 React 概念,例如 jsX、路由和表单。在本教程中,我们将把它提升一个新的水平,并尝试理解 React 中的动画。虽然有很多方法可以向 React 应用程序添加动画,但我们将在本文中重点介绍 React Transition Group 以及如何使用它。

React 中的动画

React 提供了许多用于动画 React 应用程序的附加实用程序,其中之一称为 React Transition Group,由 React 开发团队创建

它不是一个设置动画样式的库;相反,它是一个具有四种类型内置组件的低级 api:Transition、cssTransition、SwitchTransition 和 TransitionGroup。因此,在状态更改期间将 React 组件动画移入和移出 DOM 非常简单

React Transition Group 是一个非常简单的入门工具,而且由于它是轻量级的,因此可以减少对样板代码的需求,而加快开发过程。

开始使用

首先,让我们在终端中使用 crEATe-react-app 包安装 react 。

npx create-react-app react-animations
登录后复制

打开公共文件夹的index.html文件并编辑标题,如下所示:

<title>TutsPlus - React Animations</title>
登录后复制

让我们在应用程序的 src 文件夹中创建一个名为 components 的文件夹,并创建一个 Home.JS 文件。接下来,我们通过创建一个名为 Home 的功能组件并渲染一个 h2 标签更新此文件。

import React from "react";

const Home = () =&gt; {
  return (
    
      <h2>{"TutsPlus - Welcome to React Animations!"}</h2>
    &gt;
  );
};

export default Home;
登录后复制

接下来,通过导入 Home 组件来更新 App.js 文件:

import React from "react";
import Home from "./components/Home";

const App = () =&gt; {
  return (
    
      <home></home>&gt;
  );
};

export default App;
登录后复制

然后,通过运行以下命令启动开发服务器

npm run start
登录后复制

反应过渡组

让我们首先在 React 中尝试一个简单的动画,方法是将 react-transition-group 包安装到项目中。

npm install react-transition-group
登录后复制

接下来,我们从 Home.js 文件中的 react-transition-group 包导入前面提到的四个组件。

import {Transition, CSSTransition, SwitchTransition, TransitionGroup} from "react-transition-group";
登录后复制

接下来,我们将了解每个组件的工作原理

转换组件

Transition 组件提供了一个 API,用于定义组件在安装和卸载期间从一种状态到另一种状态的转换。

现在,在 Home 组件中,将 h2 标签包装在 Transition 组件中,并像这样更新代码。

import React, { usestate } from "react";

const duration = 300;

const defaultStyle = {
  transition: `oPAcity ${duration}ms ease-in-out`,
  opacity: 0,
};

const transitionStyles = {
  entering: { opacity: 1 },
  entered: { opacity: 1 },
  exiting: { opacity: 0 },
  exited: { opacity: 0 },
};

const Home = () =&gt; {
  const [inPRop, setInProp] = useState(false);
  return (
    
      <div>
        <transition in="{inProp}" timeout="{300}">
          {(state) =&gt; (
            <h2 style="{{" ...defaultstyle ...transitionstyles>
              {"TutsPlus - Welcome to React Animations"}
            </h2>
          )}
        </transition><button onclick="{()"> setInProp(!inProp)}&gt;
          Click to {inProp ? "Exit" : "Enter"}
        </button>
      </div>
    &gt;
  );
};

export default Home;
登录后复制

使用 Transition 标签,我们定义了动画发生的部分。我们还使用 inProp 状态为转换指定了 in 属性,这会切换转换状态。

正如您所注意到的,我们在上面的 defaultStyle 和 Transition 组件中使用 timeout 属性指定了动画持续时间。这是因为 React 就是这样知道何时从元素中删除动画类以及何时从 DOM 中删除元素的。

保存以上更改并刷新页面。页面加载后,几秒钟内您就应该能够看到动画文本。

CSSTransition 组件

当尝试在 React 组件中实现基于 CSS 的动画时,CSSTransition 组件会派上用场。

因为该组件基于 Transition 组件,所以它继承了该组件的所有 props,并且还使用几个类来定义转换。

了解其工作原理,我们将以下代码添加到 index.css 文件中,如下所示:

.react-animations-enter {
  opacity: 0;
}
.react-animations-enter-active {
  opacity: 1;
  transition: opacity 200ms;
}
.react-animations-exit {
  opacity: 1;
}
.react-animations-exit-active {
  opacity: 0;
  transition: opacity 200ms;
}
登录后复制

从 *-enter 到 *-exit-active,每个类定义了组件处于“进入”、“进入”、“退出”时的转换,和“退出”状态。

然后,在 Home.js 中,我们将组件内容包装到 CSSTransition 标签中,传入 in 和 timeout 属性以及我们之前定义的类:

<div>
    <csstransition in="{dISPlayText}" timeout="{300}" classnames="react-animations" unmountonexit><h2>{"TutsPlus - Welcome to CSSTransition"}</h2>
    </csstransition><button onclick="{()"> seTDisplayText(!displayText)}&gt;
          Display Text
        </button>
</div>
登录后复制

请注意,上面的 classNames 属性有一个 react-animations 值,该值适用于定义的所有类。

SwitchTransition 类

顾名思义,当您想要根据选定的模式(输入-输出输出-输入)在状态转换之间切换渲染时,此组件非常有用。当您希望一个组件在插入另一个组件时淡出时,它会很有用。

要访问此实用程序的属性,我们还将组件的内容包装在 SwitchTransition 标记中。还需要注意的是,SwitchTransition 应与 Transition 或 CSSTransition 组件一起使用。

让我们将以下代码添加到 index.css 文件中,如下所示来创建我们的类:

.fade-enter{
   opacity: 0;
}

.fade-exit{
   opacity: 1;
}

.fade-enter-active{
   opacity: 1;
}

.fade-exit-active{
   opacity: 0;
}

.fade-enter-active,
.fade-exit-active{
   transition: opacity 500ms;
}
登录后复制

让我们看看它是如何工作的,从 out-in 模式开始,这是默认模式:

 const [state, setState] = useState(false);
 
   <switchtransition><csstransition key="{state" you enjoy our tutorial : to tutsplus addendlistener="{(node," done> node.addEventListener("transitionend", done, false)}
       classNames='fade'
     &gt;
       <button onclick="{()"> setState(state =&gt; !state)}&gt;
         {state ? "Did you Enjoy our Tutorial?" : "Welcome to TutsPlus"}
       </button>
     </csstransition></switchtransition>
登录后复制

上面代码中的 key 属性会跟踪组件中的状态,而 addEndListener 属性会阻止组件几乎立即翻转。如果没有它,看起来就像没有实现动画一样。

接下来是输入输出模式,其中 SwitchTransition 标记采用 mode 属性以及 in-out 值。现在更新您的代码以查看其工作原理:

<switchtransition mode='{"in-out"}'>
    {Code goes here}
</switchtransition>
登录后复制

过渡组

该组件有助于管理列表中的 Transition 或 CSSTransition 组件。以下是如何应用它的示例。

像这样更新Home.js

const [items, setItems] = useState(["Manal"]);

const CONTACTS = ["Jane", "Fred", "John", "Doe", "Brown"];

const onAddContacts = () =&gt; {
    const newItem = CONTACTS.find((item) =&gt; !items.includes(item));
    
    if (newItem) {
      setItems((prev) =&gt; [...prev, newItem]);
    }
};

<div>
      <transitiongroup><h2>Contacts</h2>
        {items.MAP((item, index) =&gt; (
          <csstransition key="{index}" timeout="{900}" classnames="fade"><p>{item}</p>
          </csstransition>
        ))}
        <button onclick="{onAddContacts}">Add a Contact</button>
      </transitiongroup>
</div>
登录后复制

保存以上内容并刷新页面。单击该按钮,该项目应添加到带有动画的列表中。

从上面的代码中,我们初始化了一个名为 CONTACTS 的静态 DAta 集。然后,定义了一个 onAddContacts 函数,该函数将处理添加新联系人的操作,并在按钮上触发。

列表中的每个项目都包含在 CSSTransition 标记中,以对新插入的项目进行动画处理。最后,该组件被包装在 TransitionGroup 组件中以管理其中包含的转换。

这是完整的 Home.js 组件:

import React, { useState } from "react";

import {
  Transition,
  CSSTransition,
  SwitchTransition,
  TransitionGroup
} from "react-transition-group";

const duration = 300;

const defaultStyle = {
  transition: `opacity ${duration}ms ease-in-out`,
  opacity: 0,
};

const transitionStyles = {
  entering: { opacity: 1 },
  entered: { opacity: 1 },
  exiting: { opacity: 0 },
  exited: { opacity: 0 },
};

const Home = () =&gt; {
  const [inProp, setInProp] = useState(false);
  const [displayText, setDisplayText] = useState(false);
  const [state, setState] = useState(false);

  const [items, setItems] = useState(["Manal"]);

  const CONTACTS = ["Jane", "Fred", "John", "Doe", "Brown"];

  const onAddContacts = () =&gt; {
    const newItem = CONTACTS.find((item) =&gt; !items.includes(item));
    if (newItem) {
      setItems((prev) =&gt; [...prev, newItem]);
    }
  };

  return (
    
      <div>
        <transition in="{inProp}" timeout="{300}">
          {(state) =&gt; (
            <h2 style="{{" ...defaultstyle ...transitionstyles>
              {"TutsPlus - Welcome to React Animations"}
            </h2>
          )}
        </transition><button onclick="{()"> setInProp(!inProp)}&gt;
          Click to {inProp ? "Exit" : "Enter"}
        </button>
      </div>

      <div>
        <csstransition in="{displayText}" timeout="{300}" classnames="react-animations" unmountonexit><h2>{"TutsPlus - Welcome to CSSTransition"}</h2>
        </csstransition><button onclick="{()"> setDisplayText(!displayText)}&gt;
          Display Text
        </button>
      </div>

      <div>
        <switchtransition mode='{"in-out"}'><csstransition key="{state" you enjoy our tutorial : to tutsplus addendlistener="{(node," done>
              node.addEventListener("transitionend", done, false)
            }
            classNames="fade"
          &gt;
            <button onclick="{()"> setState((state) =&gt; !state)}&gt;
              {state ? "Did you Enjoy our Tutorial?" : "Welcome to TutsPlus"}
            </button>
          </csstransition></switchtransition>
</div>

      <div>
      <transitiongroup><h2>Contacts</h2>
        {items.map((item, index) =&gt; (
          <csstransition key="{index}" timeout="{900}" classnames="fade"><p>{item}</p>
          </csstransition>
        ))}
        <button onclick="{onAddContacts}">Add a Contact</button>
      </transitiongroup>
</div>
    &gt;
  );
};

export default Home;
登录后复制

总结

在本教程中,您了解了如何开始在 React 中使用动画。您创建了一个简单的 React 应用程序,并了解了如何实现四个 React Transition Group 组件。有关 React 动画的深入信息,我建议阅读官方文档。

本教程的源代码可在 gitHub 上获取

以上就是探索 React 动画的世界:简介的详细内容,更多请关注慧达AI工具网其它相关文章

转载请说明出处 内容投诉内容投诉
慧达seo-站长工具-seo工具-采集-发布-AI文章生成发布工具 » 探索 React 动画的世界:简介

慧达AI专注站群seo管理工具

查看演示 官网购买