In this ReactJS code in component I would expect this.setState( {b_MyPartyCat: value} )
to update this.state.b_MyPartyCat
so the two console.log statements in updatePartyCategory()
show the same value, but they don't.
var MyIconButton = React.createClass({
handleSubmit: function(e) {
e.preventDefault();
var b_buttonOn = false;
if (this.props.pressed === true) {
b_buttonOn = false;
}
else {
b_buttonOn = true;
}
this.props.updateFilter( b_buttonOn );
},
render: function() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<input type="image" src={this.props.pressed ? this.props.onpic : this.props.offpic }></input>
</form>
</div>
);
}
});
var MyPartyCatButton = React.createClass({
render: function() {
return (
<MyIconButton pressed={this.props.pressed} updateFilter={this.props.updateFilter} onpic="static/images/icon1.jpeg" offpic="static/images/off-icon.jpg"/>
);
}
});
//
// Main App view
var MyHomeView = React.createClass({
getInitialState: function() {
// This is where I'll eventually get data from the server.
return {
b_MyPartyCat: true
};
},
updatePartyCategory: function(value) {
// Eventually will write value to the server.
this.setState( {b_MyPartyCat: value} );
console.log("INSIDE: MyHomeView() updatePartyCategory() value = " + value );
console.log("INSIDE: MyHomeView() updatePartyCategory() this.state.b_MyPartyCat = " + this.state.b_MyPartyCat );
},
render: function() {
return (
<div>
<MyPartyCatButton pressed={this.state.b_MyPartyCat} updateFilter={this.updatePartyCategory}/>
</div>
// Eventually will have 3 other categories i.e. Books, Skateboards, Trees !
);
}
});
according to the official documentation of react, we can make setState synchronous by passing the callback function in the second argument.
Why setState() is async? ReactJs sets its state asynchronously because it can result in an expensive operation. Making it synchronous might leave the browser unresponsive. Asynchronous setState calls are batched to provide a better user experience and performance.
The setState() Method State can be updated in response to event handlers, server responses, or prop changes. This is done using the setState() method. The setState() method enqueues all of the updates made to the component state and instructs React to re-render the component and its children with the updated state.
setState function or the updater function returned by the React. useState() Hook in class and function components, respectively. State updates in React are asynchronous; when an update is requested, there is no guarantee that the updates will be made immediately.
setState
actually queues a state update. If you want to do something after it's actually executed, you can pass a callback as the second argument.
updatePartyCategory: function(value) {
this.setState({b_MyPartyCat: value}, function(){
console.log(this.state.value === value); // true
}.bind(this));
},
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With