标签: react-transition-group

TransitionGroup和CssTransition:退出过渡不适用

我从旧的迁移CSSTransitionGroup到新的react-transition-group CSSTransitionTransitionGroup

我正在创建(破解)叠加层加载器,并且尝试在动画出现和消失时将动画应用于叠加层。

具体来说,当我将active=true道具传递给时,会将LoadingOverlayWrapperCSSTransition的东西添加到TransitionGroup(该Fade组件)中,以包裹叠加层以显示。

active=false随后CSSTransition从内取出TransitionGroup(直接孩子TransitionGroupIS null)。

这是代码的相关部分:

import React, {Children} from 'react'
import PropTypes from 'prop-types'
import {CSSTransition, TransitionGroup} from 'react-transition-group'
import LoadingOverlay from "./LoadingOverlay";
import styles from './Overlay.sass';


const FirstChild = props => Children.toArray(props.children)[0] || null;

const Fade = (props) => (
  <CSSTransition
    {...props}
    timeout={500}
    classNames={{
      appear: styles.appear,
      appearActive: styles.appearActive,
      enter: styles.enter,
      enterActive: styles.enterActive, …
Run Code Online (Sandbox Code Playgroud)

javascript animation reactjs react-transition-group

5
推荐指数
1
解决办法
705
查看次数

使用react-transition-group v2卸载组件时的基本转换(2018年3月)

我设置淡入淡出过渡的代码是最简单的:

import React from 'react';
import { Transition } from 'react-transition-group';
import PropTypes from 'prop-types';

const duration = 250;

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


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


export default class Fade extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      in: false,
    };
  }

  componentDidMount() {
    this.setState({ in: true …
Run Code Online (Sandbox Code Playgroud)

transition reactjs react-transition-group

5
推荐指数
0
解决办法
744
查看次数

React Transition Group 向上滑动元素

我当前的版本隐藏了每一行,但它发生得太快了,正如您 在我的 codepen 中看到的那样通过删除顶部元素来重现。

我希望事件是这样展开的:

  1. 消退
  2. 向上滑动

我不确定如何使用 CSS 转换和 ReactTransitionGroup 来做到这一点

如果我能到达你看到元素消失的阶段,那么所有的东西都会聚集在一起,这将是一个很好的开始!

我的过渡材料:

const CustomerList = ({ onDelete, customers }) => {
  return (
    <div class="customer-list">
      <TransitionGroup>
        {customers.map((c, i) => 
          <CSSTransition
            key={i}
            classNames="customer"
            timeout={{ enter: 500, exit: 1200 }}
          >        
            <CustomerRow
              customer={c}
              onDelete={() => onDelete(i, c)}
            />
          </CSSTransition>
        )}  
      </TransitionGroup>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

我的CSS:

.customer-enter {
  opacity: 0.01;
}

.customer-enter.customer-enter-active {
  opacity: 1;
  transition: 500ms;
}

.customer-exit {
  opacity: 1;
}

.customer-exit.customer-exit-active {
  opacity: 0.01;
  transition: …
Run Code Online (Sandbox Code Playgroud)

javascript css reactjs react-transition-group

4
推荐指数
1
解决办法
1万
查看次数

退出时使用的 React CSSTransition 错误类

更新:

对于那些面临同样问题的人:我在 ReactTransitionGroup 的 git 页面上发现了一个类似的问题,其中有解决方案:https : //github.com/reactjs/react-transition-group/issues/182

老实说,90% 的解决方案让我印象深刻,我根本不明白,这是唯一对我有意义的部分(取自React TransitionGroup 和 React.cloneElement 不发送更新的道具这与 git 问题相关):

传递道具给孩子? 现在的问题是,为什么没有更新的道具被传递给离开元素?那么,它会如何获得道具呢?道具从父组件传递给子组件。如果您查看上面的示例 JSX,您可以看到离开元素处于分离状态。它没有父级,它只是被渲染,因为 将它存储在它的状态中。

我必须进一步研究和了解父组件和子组件的通信方式。我仍然是 Web 开发的新手,但事情正在慢慢开始变得有意义。

------------------

最初提出的问题:

当您尝试通过 React.cloneElement 将状态注入到您的子组件时,离开组件不是这些子组件之一。

我有一个包含导航菜单和嵌套在开关容器之间的路由的小应用程序。每次单击导航项时,我都会检查索引是更高还是更低以相应地设置动画状态(左或右),然后存储单击的导航项的新索引。

每次我切换路线时,应用的动画要么是淡入淡出,要么是淡入淡出。现在这一切正常,但唯一的问题是当类从左向右切换时,应用的 EXIT 动画使用给定的前一个类。

我理解为什么会发生这种情况,这是因为使用的退出类是最初设置的,当新类仅应用于第二次更改时,新的退出才会生效。转换文档非常有限,我找不到任何东西。

const { Component } = React;
const { TransitionGroup, CSSTransition } = ReactTransitionGroup;
const { HashRouter, Route, NavLink, Switch, withRouter } = ReactRouterDOM;

var icons = [
 {icon: 'far fa-address-book active', path: '/'},
 {icon: 'fab fa-linkedin', path: '/linked'},
 {icon: 'fas fa-gamepad', …
Run Code Online (Sandbox Code Playgroud)

reactjs react-transition-group

4
推荐指数
1
解决办法
2185
查看次数

回调函数放在react-transition-group中的什么位置

我只想在转换结束后运行一个进程。

这里的文档说:

添加结束监听器

添加自定义转换结束触发器。使用正在转换的 DOM 节点和完成回调进行调用。允许更细粒度的转换结束逻辑。注意:如果提供的话,超时仍可用作后备措施。

addEndListener={(node, done) => {
  // use the css transitionend event to mark the finish of a transition
  node.addEventListener('transitionend', done, false);
}}
Run Code Online (Sandbox Code Playgroud)

所以我这样使用它:

<Transition
  addEndListener={(node, done) => {node.addEventListener('transitionend', done, false);}}>
  <MyComponent />
</Transition>
Run Code Online (Sandbox Code Playgroud)

问题是我不明白在转换结束后将函数放在哪里执行。

如果这是我的功能:

function abc() {
  // blah
  // blah
  //blah
}
Run Code Online (Sandbox Code Playgroud)

我可以把它放在哪里?我应该把它放在 的位置done吗?

javascript addeventlistener reactjs react-transition-group

4
推荐指数
1
解决办法
4227
查看次数

React Router使用TransitionGroup抛出重定向警告

我正在使用带有React Transition Group的React Router在路线之间设置动画。使用<Redirect />组件时出现问题。该应用程序可以运行,但是我从React Router收到以下警告:

警告:您试图重定向到当前使用的相同路由:“ /”

您可以在此代码沙箱中看到它的发生。确保打开沙箱控制台,然后输入错误的路径(例如codesandbox.io/abc)。

我尝试遵循他们在文档中提供的示例(https://reacttraining.com/react-router/web/example/animated-transitions),但其中不包括重定向。有没有更好的方法来使用重定向和转换来避免警告?

reactjs react-router react-transition-group

3
推荐指数
1
解决办法
465
查看次数

是否有 React Transition Group 的 SwitchTransition 组件的工作示例?

我正在尝试使用一个SwitchTransition组件。不幸的是,文档中代码不是一个完整的例子,我在填空时遇到了麻烦。有没有人有一个使用此组件的简单示例,例如 CSS 淡出然后淡入?

我在网上找不到任何例子。这是否意味着我忽略了另一种常见的方法?谢谢!

reactjs react-transition-group

3
推荐指数
1
解决办法
1885
查看次数

如何为带有React过渡组的每个项目使用不同的延迟?

我正在使用TransitionGroupCSSTransition(带有淡入淡出效果)对一系列项目的进入和退出进行动画处理。我希望这些项目在它们之间出现延迟,而不是同时出现。请注意,延迟可以低于动画的持续时间。

使用我当前的代码,所有项目都同时在淡入(如预期的那样)。在我的渲染函数中,我可以使用以下内容为组件的入口和出口设置动画:

<TransitionGroup>
    items.map((item,index) => ( 
        <CSSTransition
            key={item.id}
            timeout={1000}
            classNames="fade"
                <ItemPreview item={item} />
         </CSSTransition>
    ))
</TransitionGroup>
Run Code Online (Sandbox Code Playgroud)

和CSS:

.fade-enter{
    opacity: 0;
    visibility: hidden;
    transition: all ease 1s;
}

.fade-enter.fade-enter-active{
    opacity: 1;
    visibility: visible;
    transition: all ease 1s;
}

.fade-exit {
    visibility: visible;
    opacity: 0;
}

.fade-exit.fade-exit-active{
    opacity: 0;
    visibility: hidden;
    transition: all ease 1s;
}
Run Code Online (Sandbox Code Playgroud)

如何为每个商品添加不同的延迟?

javascript css-transitions reactjs react-transition-group

2
推荐指数
1
解决办法
2401
查看次数

react-transition-group/react-router 在路由更改时跳转到窗口顶部

https://www.wealthsimple.com/en-ca/culture/

如果您在内部页面上滚动任意距离并导航到另一个页面,它会快速跳转到页面顶部,然后进行页面转换。

我的过渡容器为 pos:ab。有什么想法为什么会发生这种情况吗?

reactjs gatsby react-transition-group

2
推荐指数
1
解决办法
1120
查看次数

进入时动画不起作用(Tailwind、TransitionGroup、Typescript)

我创建了一个包装组件,通过字符串提供类名列表,以支持 Tailwind 实用程序转换。这旨在嵌套在 TransitionGroup 组件中以支持多个项目的动画,如列表。

我能够很好地制作动画,但输入不起作用。你能帮我找出这段代码中的错误吗?

反应 16.13.1 反应过渡组 4.4.1

沙盒:https : //codesandbox.io/s/delicate-feather-ymozq

(登录那里观看 div 引用,以防类没有被应用,但它们似乎工作正常)

import React, { ReactNode } from "react";
import { Transition as ReactTransition } from "react-transition-group";

interface TransitionProps {
  in?: boolean;
  timeout: number;
  enter?: string;
  enterFrom?: string;
  enterTo?: string;
  leave?: string;
  leaveFrom?: string;
  leaveTo?: string;
  children: ReactNode;
}

export function CSSTransition(props: TransitionProps) {
  const { enter, enterFrom, enterTo, leave, leaveFrom, leaveTo } = props;
  const nodeRef = React.useRef<HTMLDivElement>(null);

  const enterClasses = splitClasses(enter);
  const enterFromClasses …
Run Code Online (Sandbox Code Playgroud)

javascript typescript reactjs react-transition-group tailwind-css

2
推荐指数
1
解决办法
3086
查看次数