63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Optimize Re-Renders with shouldComponentUpdate
 | |
| ---
 | |
| ## Optimize Re-Renders with shouldComponentUpdate
 | |
| 
 | |
| ## Hint:
 | |
| 
 | |
| Check to see if the value of ```nextProps``` is even.
 | |
| 
 | |
| ## Solution:
 | |
| 
 | |
| For this solution, you will use an ```if/then``` statement to check whether the value of ```nextProps``` is even. ```nextProps``` differs from ```props``` in that it is a value that has not been rendered in the UI yet so in the ```shouldComponentUpdate()``` method, you are essentially asking permission to update the UI with the ```nextProps``` value.
 | |
| 
 | |
| ```jsx
 | |
| class OnlyEvens extends React.Component {
 | |
|   constructor(props) {
 | |
|     super(props);
 | |
|   }
 | |
|   shouldComponentUpdate(nextProps, nextState) {
 | |
|     console.log('Should I update?');
 | |
|      // change code below this line
 | |
|       if (nextProps.value % 2 == 0) {
 | |
|         return true;
 | |
|       }
 | |
|       return false;
 | |
|      // change code above this line
 | |
|   }
 | |
|   componentWillReceiveProps(nextProps) {
 | |
|     console.log('Receiving new props...');
 | |
|   }
 | |
|   componentDidUpdate() {
 | |
|     console.log('Component re-rendered.');
 | |
|   }
 | |
|   render() {
 | |
|     return <h1>{this.props.value}</h1>
 | |
|   }
 | |
| };
 | |
| 
 | |
| class Controller extends React.Component {
 | |
|   constructor(props) {
 | |
|     super(props);
 | |
|     this.state = {
 | |
|       value: 0
 | |
|     };
 | |
|     this.addValue = this.addValue.bind(this);
 | |
|   }
 | |
|   addValue() {
 | |
|     this.setState({
 | |
|       value: this.state.value + 1
 | |
|     });
 | |
|   }
 | |
|   render() {
 | |
|     return (
 | |
|       <div>
 | |
|         <button onClick={this.addValue}>Add</button>
 | |
|         <OnlyEvens value={this.state.value}/>
 | |
|       </div>
 | |
|     );
 | |
|   }
 | |
| };
 | |
| ```
 | |
| <!-- The article goes here, in GitHub-flavored Markdown. Feel free to add YouTube videos, images, and CodePen/JSBin embeds  -->
 |