每次因道具更改而重新渲染时,我都希望在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;
}
然而,动画只在初始渲染时播放一次。每次都想玩
对不起,现在我完全明白你的问题了,要强制元素重新渲染,你只需更改它的键
道具,这将触发渲染,使它认为是另一个元素
参考这个答案: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>
这里的技巧是在卡片元素上使用随机的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>
添加如下键:
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动画,在动画的每个单次迭代之间添加延迟的一种方法是修改关键帧设置,以使其产生所需的延迟。 在以下代码段中,正在执行以下操作: 动画的整个持续时间为
我有一个父功能组件