I was reading the react 16 features. I stuck on the below point. can anyone please clarify the below point.
setState callbacks (second argument) now fire immediately after componentDidMount / componentDidUpdate instead of after all components have rendered.
What will be the difference when below code executes in both version of react i.e < 16 and 16.
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
this.state = {name: 'default'}
}
changeState() {
this.setState({name: 'shubham'}, ()=> this.callbackSuccess())
}
callbackSuccess() {
console.log('call back success');
}
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<Child1 name={`fromchild 1 ${this.state.name}`}/>
<Child2 name={`fromchild 2 ${this.state.name}`}/>
<Child3 name={`fromchild 3 ${this.state.name}`}/>
<p className="App-intro" onClick={() => this.changeState()}>
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
componentDidUpdate(prevProps, prevState) {
console.log('component did update prevprops',prevProps)
console.log('component did update prevState',prevState)
}
componentDidMount(prevProps, prevState) {
console.log('component did mount')
}
}
class Child1 extends Component {
render() {
console.log('child1 render')
const {name} = this.props;
return (<h1> from child1 {name}</h1>)
}
}
class Child2 extends Component {
render() {
console.log('child2 render')
const {name} = this.props;
return (<h1> from child2 {name}</h1>)
}
}
class Child3 extends Component {
render() {
console.log('child3 render')
const {name} = this.props;
return (<h1> from child3 {name}</h1>)
}
}
export default App;