当前位置: 首页 > 知识库问答 >
问题:

如何触发CSS动画上的每一次反应组件重新渲染

陆弘新
2023-03-14

每次因道具更改而重新渲染时,我都希望在react组件上播放动画:

反应:

function Card({ cardText }) {
  return <div className="roll-out">{cardText}<div/>
}

所以我做了css:

@keyframes rollout {
  0% { transform: translateY(-100px); }
  100% { transform: none; }
}

.roll-out {
  animation: rollout 0.4s;
}

然而,动画只在初始渲染时播放一次。每次都想玩


共有3个答案

太叔航
2023-03-14

对不起,现在我完全明白你的问题了,要强制元素重新渲染,你只需更改它的道具,这将触发渲染,使它认为是另一个元素

参考这个答案:https://stackoverflow.com/a/35004739

function Card({
  cardText
}) {
  return <div className = "roll-out" > {
    cardText
  } </div>
}

ReactDOM.render( (<Card cardText="Hey There" />) , document.getElementById('root'))
css prettyprint-override">@keyframes rollout {
  0% {
    transform: translateY(-100px);
  }
  100% {
    transform: translateY(0);
  }
}

.roll-out {
  animation: .4s rollout;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>


<div id="root"></div>
倪振海
2023-03-14

这里的技巧是在卡片元素上使用随机的key字段。React的区分算法将具有相同键的元素视为相同的元素,因此随机化键将使react将每个重新呈现的元素视为新的元素,因此将从DOM中删除旧元素并添加一个全新的元素

下面是一个以@aXuser264的代码为基础的演示。

class Card extends React.Component{
   onClick = ()=>this.forceUpdate();
   render(){
       return <div key={Math.random()} className="roll-out" onClick={this.onClick}> {
    this.props.cardText
     } </div>
  }
}

ReactDOM.render( (<Card cardText="Hey There" />) , document.getElementById('root'))
@keyframes rollout {
  0% {
    transform: translateY(-100px);
  }
  100% {
    transform: translateY(0);
  }
}

.roll-out {
  animation: .4s rollout;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>


<div id="root"></div>
魏成济
2023-03-14

添加如下键:

function Card({ cardText }) {
  return <div key={cardText} className="roll-out">{cardText}<div/>
}

在代码中,当div重新呈现时,react只更改其内部文本。添加密钥将使react在密钥更改时认为它是另一个div,因此它将卸载它并再次装载。

 类似资料:
  • 问题内容: 因此,我有以下规则: 还有一些CSS定义了我的一些动画规则: 我可以在这样的: 但是我以后不能再动摇了。 这只会摇晃盒子一次: 如何在不使用超时或多个动画的情况下通过JavaScript重新触发CSS动画? 问题答案: 我在CSS3转换测试github页面上根据源代码和示例找到了答案。 基本上,CSS动画具有一个在动画完成时触发的事件。 对于Webkit浏览器,此事件称为“”。因此,为

  • CSS: 这个“滚动”动画只在初始渲染时播放一次。每次由于更改而重新呈现时,我都希望播放它。不使用库怎么做?

  • 所以就像标题所说的,我的应用程序的主页因为某种原因渲染了两次,我不知道为什么。从我的浏览器路由器,我最初调用一个JS文件,从那里我调用我的HomePage组件和React路由器,但然后我的页面渲染两次,我不知道为什么。 我的浏览器路由器(index.js): 然后pp.js被称为: 然后我的主页组件(index.jsx): 和路线。js: 但是我的页面是这样渲染的: 我真的很困惑,所以任何建议都会

  • 我希望每次只呈现数组中的三个元素。 每次我将单击em来更改数字。 例如:在屏幕上:123,我点击了在按钮,会出现456和以上。 MyCode:

  • 问题内容: 我正在使用WOW.js和animate.css,现在我正在将CSS运行到Infinite。我想知道如何让我的课程在3秒钟内停止运行并再次开始无限运行? 我的html: 我的CSS类: 解决方案可以是JS或CSS3。 问题答案: 对于纯CSS3动画,在动画的每个单次迭代之间添加延迟的一种方法是修改关键帧设置,以使其产生所需的延迟。 在以下代码段中,正在执行以下操作: 动画的整个持续时间为