安装EffectBox
组件后,我想向此组件添加show
class
。但是css过渡不起作用。
这是js代码:
var EffectBox = React.createClass({
componentDidMount: function () {
this.show();
// setTimeout(this.show, 100);
},
show: function () {
$(React.findDOMNode(this)).addClass('show');
},
render: function () {
return (
<div className="effect-box" >
<div className="header"></div>
<div className="content">
...
)
}
});
Css如下:
.effect-box {
transform: translate3d(0, -100%, 0);
transition: all .4s;
}
.show {
transform: none;
}
当我使用delay
来调用show function(use setTimeout)
时,css动画可以正常工作。此时(componentDidMount)
,真正的DOM是否已呈现?
答案 0 :(得分:0)
我在我自己的React项目中使用以下代码尝试了这个,这似乎工作正常:
componentDidMount: function() {
this.show();
},
show: function() {
React.findDOMNode(this).classList.add('show');
}
和
.show {
transition: transform 400ms;
transform: translate3d(-200px, -200px, 0px);
}
答案 1 :(得分:0)
我遇到了这个问题,我找到了几个解决方案:
我更喜欢的是将this.show()
包裹在requestAnimationFrame
中(这是暂停的温和版本。)
componentDidMount: function () {
requestAnimationFrame(()=> {this.show();});
}
第二个非常粗鲁但是如果你不想使用任何类型的超时,你可以触发重新布局。它可能会损害应用程序性能。
componentDidMount: function () {
document.body.offsetHeight;
this.show();
}
答案 2 :(得分:-1)
而不是固定的超时,请尝试在componentDidMount中等待文档就绪:
componentDidMount: function() {
$(document).ready(function() {
this.show();
});
}