본문 바로가기
React.js

Class Component: React.PureComponent

by 찬찬2 2022. 7. 13.

state 또는 props가 변경될때 마다 전체적으로 render함수가 호출된다. 그럼에도 성능이 좋은 이유는 바로 React는 Vertual DOM을 사용하기 때문이다. 메모리상에 있는 DOM 안에서 이전 데이터와 새로운 데이터와 비교를 해 수정된 부분만 찾아내어 실제 DOM에 render되기 때문이다.

 

React.PureComponent는 컴포넌트를 업데이트 해야하는지 안해야하는지 판단해준다. 이때 비교는 shallow comparison. (오브잭트의 레프런스만 비교하는 수준. 레프런스의 데이터까지는 비교하지 않는다. ← deep comparison)

 

- Shallow comparison

ex1:

const data = { name: "chanki", age: "33" }

 

const newData = this.state.data

newData.name = "gildong"

 

** console.log( data === newData ) // true (속성값이 다르더라도 서로 참조하는 값이 같기 때문이다. render함수를 호출하지 않는다.)

이유: newData는 data를 참조하기 때문에 true이다.

 

ex2:

const data = { name: "chanki", age: "33" }

const newData = { name: "chanki", age: "33" }

 

*console.log( data === newData ) // false (참조reference가 다르기 때문이다. render함수를 호출한다)

 

즉, 얕은 비교의 값이 true일 경우 PureComponent는 rerender 함수를 호출하지 않는다. 반대로 false의 경우 render 함수를 호출한다.

 

사용방법 [1] : 이와 반대로 deep comparison은 오브젝트의 속성값을 비교해 true/false를 반환하기 때문에 PureComponent 사용 시 state 또는 props를 객채의 형태로 받아오지 않고 그 객채 안의 속성값을 특정지어 전달하여 사용할 수 있다.

 

사용방법 [2] : 

 

!!중요!!

오브젝트의 데이터를 직접적으로 수정하는 것은 가급적 피해야 한다. 오리지널 오브젝트를 복사해 변경되는 값을 적용한뒤 새로운 오브젝트로써 바꿔주는 것을 기억하자.

키워드: (ES6) Deconstructing, Spread syntax

'React.js' 카테고리의 다른 글

VSC 확장: ES7+ React/Redux/React-Native snippets  (0) 2022.07.14
onClick 이벤트와 parameter  (0) 2022.07.13
constructor( ) : 생성자  (0) 2021.01.05
CRUD Tutorial - ReactJS, NodeJS, MySQL [Part 1]  (0) 2021.01.04
[React-tutorial5] todo  (0) 2020.12.31

댓글