Having this code in mind:
var Component = React.createClass({ getInitialState: function () { return {position: 0}; }, componentDidMount: function () { setTimeout(this.setState({position: 1}), 3000); }, render: function () { return ( <div className="component"> {this.state.position} </div> ); } }); ReactDOM.render( <Component />, document.getElementById('main') );
Isn’t the state supposed to change only after 3 seconds? It’s changing immediately.
My main goal here is to change the state every 3 seconds (with setInterval()
), but since it was not working, I tried setTimeout()
, which is not working either. Any lights on this? Thanks!
Advertisement
Answer
Do
setTimeout( function() { this.setState({ position: 1 }); } .bind(this), 3000 );
Otherwise, you are passing the result of setState
to setTimeout
.
You can also use ES6 arrow functions to avoid the use of this
keyword:
setTimeout( () => this.setState({ position: 1 }), 3000 );