class App extends React.Component {
state = {
age: 29,
}
constructor(props) {
super(props);
console.log('constructor', props);
}
render() {
console.log('render');
return (
<div>
<h2>
Hello {this.props.name} - {this.state.age}
</h2>
</div>
);
}
componentWillMount() {
console.log("componentWillMount");
}
componentDidMount() {
console.log("componentDidMount");
// state 를 update 시켜주니까 render 가 다시 호출 되고 있다.
setInterval(() => {
console.log('setIn')
this.setState(state => ({
...state,
age : state.age + 1
}))
}, 1000);
}
componentWillReceiveProps(newxtProps) {
console.log("componentWillReceiveProps", newxtProps);
}
shouldComponentUpdate(newxtProps, nextState) {
console.log("shouldComponentUpdate", newxtProps, nextState);
return false;
}
componentWillUpdate(newxtProps, nextState) {
console.log("componentWillUpdate", newxtProps, nextState);
}
componentDidUpdate(prevProps, prevState) {
console.log("componentDidUpdate", prevProps, prevState);
}
}
ReactDOM.render(<App name="Malza"/>, document.querySelector('#root'));
// shouldComponentUpdate 에서 return 을 false 로 해 놓으면, console 에서 age는
// 계속 update 되지만 실제 화면에는 reRender 되고 있지 않다.
constructor {name: 'Malza'}
componentWillMount
render
componentDidMount
setIn
shouldComponentUpdate {name: 'Malza'} {age: 30}
// shouldComponentUpdate 에서 return 을 true 로 두면 계속 reRender 된다.
constructor {name: 'Malza'}
componentWillMount
render
componentDidMount
====================================================================== 한 사이클
setIn
shouldComponentUpdate {name: 'Malza'} {age: 30}
componentWillUpdate {name: 'Malza'} {age: 30}
render
componentDidUpdate {name: 'Malza'} {age: 29}
====================================================================== 한 사이클
setIn
shouldComponentUpdate {name: 'Malza'} {age: 31}
componentWillUpdate {name: 'Malza'} {age: 31}
render
componentDidUpdate {name: 'Malza'} {age: 30}