React.PureComponent란?

준호·2020년 12월 6일
0

React.Component와는 React 메소드중 하나인 shouldComponentUpdate를 다루는 방식이 다르다.

React.PureComponent는 shouldComponentUpdate가 이미 구현되어 있고,

props와 state를 얕은 비교를 한 뒤 변경된 것이 있는경우만 리렌더링한다.

즉, PureComponent는 성능을 향상시키는데 중요한 것인 ShouldComponentUpdate를 신경쓰지 않아도 된다.

밑의 코드는 사용자가 버튼을 클릭하면 카운터가 랜덤하게 증가하는 컴포넌트다.

import React, { PureComponent } from 'react';
import { render } from 'react-dom';

const root = document.querySelector('#root');
const pTag = document.createElement('p');

const logClosure = () => {
let clickedCount = 0;
let reRenderedCount = -1;

return (isReRendered) => {
if (isReRendered) {
reRenderedCount += 1;
} else {
clickedCount += 1;
}

pTag.textContent = `log -> click count : ${clickedCount} | re-render count : ${reRenderedCount}`;

};
};

const log = logClosure();

class App extends PureComponent {
constructor(props) {
super(props);
this.state = {
counter: 0,
};
this.handleClick = this.handleClick.bind(this);
}

componentDidMount() {
root.after(pTag);
}

handleClick() {
log(false);

if (Math.floor(Math.random() * 10) % 2) {
  this.setState({
    counter: this.state.counter + 1,
  });
} else {
  this.setState({
    counter: this.state.counter,
  });
}

}

render() {
log(true);

return (
  <div>
    {this.state.counter}
    <br />
    <input
      type="button"
      onClick={this.handleClick}
      value="click"
    />
  </div>
);

}
}

render(, root);
PureComponent를 사용하면 카운트가 증가할 때만 re-render 하지만

Component를 사용하면 setState가 실행되어, 매 클릭마다 re-render 한다.

this.state.counter는 0부터 10까지의 랜덤한 값을 받아 그게 2로 나눠지는 수 ( 짝수 )

인 경우에만 counter가 1씩 늘어나게되는데

이 counter에 변화가 생긴경우에만 re-render가 되는게 PureComponent다

profile
빠르게 발전중인 프론트엔드 개발자

0개의 댓글