shouldComponentUpdate()
- props또는 state가 새로운 값으로 갱신되어서 렌더링이 발생하기 직전에 호출된다.
- 기본값은 true이다.
- 초기 렌더링 혹은 forceUpdate()가 사용될때는 호출되지 않는다.
- 오로지 성능 최적화만을 위한것이다.
- props또는 state가 변할때만 렌더하기 때문에 성능 최적화에 도움이 된다.
- 렌더링을 방지하려는 목적으로 사용할 경우 버그로 이어질 수 있다.
- shouldComponentUpdate()의 내용을 직접 작성하는 대신에 PureComponent를 사용하는 것이 좋다.
- 만약 이 메서드를 직접 작성할 자신이 있다면
this.props
와 nextProps
그리고 this.state
와 nextState
를 비교한 뒤 false를 반환하는 것으로 React가 갱신 작업을 건너뛰게 만들 수 있다.
- 여기서 false를 반환하는 것이 자식 컴포넌트들이 각자가 가진 state의 변화에 따라 다시 렌더링을 수행하는것을 막는것은 아니다.
- shouldComponentUpdate()내에서 깊은 동일성 검사를 수행하거나 JSON.stringfy()를 사용하는것은 권장하지 않는다.
Shallow Compare란?
숫자나 문자열 같은 scalar값들을 비교할때는 그것들의 값을 비교한다.
object를 비교할때는 그것들의 attribute를 비교하지 않고 그들의 reference를 비교합니다.
shallow compare에서 object들은 레퍼런스(참조)만 체크하기 때문에 같은 값이 들어있는 object더라도 항상 다른값으로 체크하게 된다.
React.PureComponent의 특징
React.Component vs React.PureComponent
- React.Component는 shouldComponentUpdate()를 구현하지 않지만 React.PureComponent는 props와 state를 이용한 얕은 비교를 구현한다는 차이점만이 존재한다.
- React.Component에서 shouldComponentUpdate()는 항상 true를 반환한다.
- React.Component에서는 setState가 호출될때마다 렌더된다.
참고자료
React.Component - React
React 최상위 API - React