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 -->
|