Reactjs强制DOM更新

时间:2015-11-30 04:09:01

标签: javascript reactjs css-animations

我试图让css动画通过反应来获取元素的高度。

高度的CSS动画很难,因为它们需要静态高度。

为折叠设置动画(从x到0的高度)我将元素的高度设置为静态高度(使用scrollHeight),然后将高度设置为0,反之亦然,以便展开(高度从0到x )。

不幸的是,这只会有效。我认为反应是检测到这两个事件在同一道具上快速发生,并且只传播最新的DOM,这会破坏我的动画。

有没有办法强制做出反应,将两个更改传播到DOM?

代码(问题不是非常有趣):

componentWillReceiveProps(nextProps){
    if(nextProps.open !== this.props.open){
        if(nextProps.open){
            this.setState({height:0, animating: true});
        }
        else{
            this.setState({height:this.refs.body.scrollHeight, animating: true});
        }
    }
}
componentDidUpdate(prevProps, prevState){
    if(prevProps.open !== this.props.open){
        if(prevProps.open && !this.props.open){
            this.setState({height: '0'});
        }
        else{
            this.setState({height: this.refs.body.scrollHeight});
        }
        setTimeout(()=>{
            this.setState({animating:false});
        }.bind(this), this.props.animationTime);
    }
}

0 个答案:

没有答案