标签: react-transition-group

使用React Router v4和react-transition-group v2进行页面滑动动画

我正在使用React Router v4和react-transition-group v2来测试页面滑动动画.

const RouterMap = () => (
  <Router>
    <Route render={({ location }) =>
      <TransitionGroup>
        <CSSTransition key={location.pathname.split('/')[1]} timeout={500} classNames="pageSlider" mountOnEnter={true} unmountOnExit={true}>
          <Switch location={location}>
            <Route path="/" exact component={ Index } />
            <Route path="/comments" component={ Comments } />
            <Route path="/opinions" component={ Opinions } />
            <Route path="/games" component={ Games } />
          </Switch>
        </CSSTransition>
      </TransitionGroup>
    } />
  </Router>
)
Run Code Online (Sandbox Code Playgroud)

而CSS:

.pageSlider-enter {
  transform: translate3d(100%, 0, 0);
}

.pageSlider-enter.pageSlider-enter-active {
  transform: translate3d(0, 0, 0);
  transition: all 600ms;
}
.pageSlider-exit {
  transform: translate3d(0, 0, …
Run Code Online (Sandbox Code Playgroud)

react-router react-transition-group

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

使用 2017 react-router react-transition-group 示例,其中内容组件不呈现

演示和代码 => https://codesandbox.io/s/73ymn2k911

根据我通过开发工具的观察,它最初知道放置组件的位置,但忘记设置opacity: 1或删除旧组件

我怀疑问题出在 app.js请参阅下面的更新。

import React, { Component } from "react";
import { Route, matchPath } from "react-router-dom";
import TransitionGroup from "react-transition-group/TransitionGroup";
import AnimatedSwitch from "./animated_switch";
import { firstChild } from "../utils/helpers";

import TopBar from "./top_bar";
import Home from "./home";
import Projects from "./projects";
import ProjectItem from "./project_item";
import Missed from "./missed";

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            projects: []
        };
    }
    componentDidMount() {
        fetch("https://jsonplaceholder.typicode.com/posts")
            .then(response => …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router react-transition-group

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

使用`history.goBack()`时如何定义状态

我已经创建了一些动画,我想用它们在我的应用程序中的路由之间导航。我在某些页面上有一个后退按钮,允许用户弹出导航堆栈以访问最近的页面。我想要两种不同的动画,一种用于在堆栈中更深入地导航,另一种用于弹出回到最近的页面。我想使用history.goBack(),但似乎无法传递状态并因此使用不同的动画。

我使用这篇文章来弄清楚如何为我的组件设置动态动画,但除非我使用,否则我history.push({pathname, state:{animation, duration}})不知道如何在用户返回时指定要使用的不同动画。

reactjs react-router react-transition-group

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

jest 中的模拟动画完成回调

Jest我正在尝试为React使用Transitionfrom的组件编写单元测试react-transition-group。我需要模拟,Transition这样我的测试就不必等待动画完成。但是,除了“跳过”动画之外,我还需要在我的模拟组件onExited上触发回调。Transition

这是我的Component.js使用方式Transition

...
return (
  <Transition
    timeout={1500}
    in={this.state.show}
    onExited={handleExited}>
    {status =>
      <button onClick={this.setState({show: false}) className={`component-${status}`}>button</button>
    }
  </Transition>
)
Run Code Online (Sandbox Code Playgroud)

这是我的Component.test.js

import React from 'react'
import {render, fireEvent} from 'react-testing-library'

import Component from '../Component'

test('check', () => {
  const handleCompletion = jest.fn()
  const {getByText} = render(
    <Component
      onButtonClick={handleCompletion}
    />
  )
  const button = getByText('button')
  fireEvent.click(button)
  expect(handleCompletion).toHaveBeenCalledTimes(1)
})
Run Code Online (Sandbox Code Playgroud)

这个想法是,一旦button单击 a,组件就会产生动画,然后在完成后触发回调。

如何Transition正确模拟,以便它跳过动画但仍然触发 …

mocking reactjs jestjs react-transition-group

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

使用 React Transition Group 对表中的行进出进行动画处理

目标

我目前正在尝试使用React-Transition-Group对表的行进出进行动画处理。可能会发生两种不同的情况:

  • 表的全部内容将被交换(最常见的选项)
  • 可以添加和删除单独的行

我现在在哪里

我使用此待办事项列表示例作为制作表格动画的起点。这是我的沙箱

我的主要问题是当表数据被完全换出时,您可以同时看到两个数据集。当新数据滑入时,旧数据滑出。这会导致旧数据在过渡时向下移动(见下图)。

切换表

理想情况下,初始表数据在新数据进入之前会完全消失,但新数据会在旧数据存在时弹出。

代码

通过行映射的 Table Prop

  <table>
    <TransitionGroup component="tbody">
      {this.props.tables[this.props.currentTable].rows.map((row, i) => {
        return (
          <CSSTransition
            timeout={500}
            classNames="SlideIn"
            key={`${row}-${i}`}
          >
            <tr>
              {row.map((column, i) => {
                return <td>{column}</td>;
              })}
            </tr>
          </CSSTransition>
        );
      })}
    </TransitionGroup>
  </table>
Run Code Online (Sandbox Code Playgroud)

更改表数据集的函数:

  changeTable = () => {
    this.setState({
      currentTable:
        this.state.currentTable < this.state.tables.length - 1
          ? this.state.currentTable + 1
          : 0
    });
  };
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-transition-group

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

如何使用 REACT 防止动画内的组件重新渲染(更新)

在过去的几天里,我一直在尝试不同的 React 动画库,试图找到一种在视图(而不是路由)之间转换的解决方案,其中视图将是包装其他组件的组件等等。

到目前为止我尝试过:
react-transtition-group
react-animations
react-spring

仍然需要尝试 的react-motionTransition...

...还有更多的东西,但是所有这些,都做我需要的,除了一件事...当应用过渡/样式的每个状态时,子组件总是更新,触发重新渲染(顺便说一句,这是有道理的),除非子组件shouldComponentUpdate()返回 false,或者被包装在 PureComponent 内,这两者都不是解决方案,因为您可能(肯定)希望在过渡结束。

所有的示例都达到了它们的目的,但它们都使用功能组件或简单的字符串来进行演示,其中任何一个都不应该关心是否重新渲染,而是一个简单的修改,每次都会记录组件被渲染后,将显示它们在过渡期间渲染多次。

奇怪的是,似乎没有人关心或不知道。我发现关于此事的疑问或问题很少,尽管它非常真实,并且库对此的记录非常少。

请分享您的解决方案以避免此问题。

transition reactjs react-transition-group react-animations react-spring

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

React Router + 动画库问题:组件在使用 react-router-dom 卸载之前不会动画

我有以下代码:

import React from "react";
import { BrowserRouter, Route, NavLink } from "react-router-dom";
import { AnimatePresence, motion } from "framer-motion";
import Hi from "./Hi";
import Something from "./Something";
import "./App.css";

const App = () => {
  return (
    <BrowserRouter>
      <AnimatePresence>
        <NavLink to="/">Hi</NavLink>
        <br />
        <NavLink to="/something">Something</NavLink>
        <hr />
        <Route path="/" exact={true} key="1">
          <motion.div
            initial={{ opacity: 0 }}
            animate={{ opacity: 1 }}
            exit={{ opacity: 0 }}
            transition={{ duration: 2 }}
            key="hi"
          >
            <Hi />
          </motion.div>
        </Route>
        <Route path="/something" exact={true} key="2">
          <motion.div …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router-dom react-transition-group framer-motion

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

反应:在动画期间调用 Render()。发生什么了?

我想知道 React 如何处理在组件动画期间调用的 Render。在下面的例子中,一个组件被重新渲染

假设在组件动画期间组件的状态发生了变化,因此组件被重新渲染。React 会取代物理 DOM 还是会识别组件处于动画中?这是我认为会发生的事情

第 1 步:组件挂载 组件首次挂载到物理 DOM。组件的动画持续 60 秒。该组件有一个更改状态计时器,它将在 30 秒内关闭。同时,react 会在挂载时保存虚拟 DOM。

第二步:触发状态变化,组件重新渲染 30秒后,父级发生状态变化,组件重新渲染。此时组件处于动画中期,并使用 react-transition-group,将“className-active”css 类应用于子项。React 现在将比较当前的虚拟 DOM 和旧的虚拟 DOM。虚拟 DOM 是不同的,因为孩子现在应用了活动类(而不是“输入”类)。结果,react 会将更新后的组件插入到物理 DOM 中(即使物理 DOM 不需要更新!)。因此,屏幕会闪烁...

这是描述上述场景的代码

import React from 'react'
import CSSTransition from 'react-transition-group'
                                                                                                                                                                                                                     ```
class ExampleComponent extends React.Component {
      constructor(props) {
           super(props);
           this.state = {reRender : false};
           setTimeout(() => {this.setState({reRender: true})}, 30000) 
           /* 30,000 ms is 30 seconds. 
              Set state will fire in 30 seconds, and the parent …
Run Code Online (Sandbox Code Playgroud)

html javascript css reactjs react-transition-group

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

使用 Tailwind CSS 反应过渡组

<TransitionGroup>我正在尝试使用附带<CSSTransition的来实现轮播react-transition-group。我正在使用CSS框架Tailwind CSS。但是,在使用 时<CSSTransition />,我们必须导入 css。

组件.js

<TransitionGroup>
    {itemArray.map((item, idx) => (
        <CSSTransition
            timeout={350}
            classNames={direction}
            key={Math.random() + idx}>
            <div className="relative mt-8 max-w-full inline-flex">
              {item?.item}
            </div>
        </CSSTransition>
    ))}
</TransitionGroup>
Run Code Online (Sandbox Code Playgroud)

样式.css

.right-enter{ /* style */ }
.left-enter { /* style */ }
Run Code Online (Sandbox Code Playgroud)

有没有什么方法react-transition-group可以使用 Tailwind CSS 处理过渡而不需要导入 css。

我尝试使用 来实现相同的<Transition>,但是如果类在生命周期(onEnteronEntered)上更新,它将抛出too many re-renders错误。

css css-transitions reactjs react-transition-group tailwind-css

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

使用react-transition-group左右滑动

我想用react-transition-group制作左右幻灯片。当我按“下一步”按钮时,它会出现在右侧(下一步),当我单击“后退”按钮时,我想它从左侧出现。我的代码总是从右侧获取它。我怎样才能实现这样的目标

.onboarding-screen
    display flex
    flex-direction column
    flex-grow 1
    position absolute
    width 100%
    height 100%
    align-items center
    &.step-enter
        transform translateX(100%)
        transition(all 1s)
    &.step-enter-active
        transform translateX(0%)
        transition(all 1s)
    &.step-enter-done
        position relative
    &.step-exit
        transform translateX(-100%)
        transition(all 1s)
    &.step-exit-active
        transform translateX(-100%)
        transition(all 1s)
    &.step-exit-done
        position relative
Run Code Online (Sandbox Code Playgroud)

reactjs react-transition-group

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