react js模拟动画疑问

var AnimationExample=React.createClass({

            getInitialState:function(){
                return {
                    position:0
                }
            },
            animationFun:function(){
                if(this.state.position<this.props.position){
                    this.setState({
                        position:this.state.position+1
                    })
                }
            },
            componentDidUpdate:function(){
                if(this.props.position){
                    setTimeout(this.animationFun,this.props.timeoutMs)
                }
            },
            render:function(){
                var divStl={
                    marginLeft:this.state.position
                };
                return (
                    <div style={divStl}>This is animate!</div>
                )
            }
            
        });
        

        ReactDOM.render(
            <AnimationExample />,
            document.getElementById('animationContent')
        );
        ReactDOM.render(
            <AnimationExample position={100} timeoutMs={10}/>,document.getElementById('animationContent')
        );

这是一个简单的js模拟动画,我的疑问是为什么最后要render两次,而render一次不行呢

阅读 3k
2 个回答

因为列出的component会根据position属性的变化而更新,第一次render时compoent没有props.position,第二次render后props.position的值为100。

我觉得用React写动画还是不用setState吧,因为一般来说你已经确切的知道要修改哪些属性值,而setState还要去diff整个state,感觉会影响效率。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题