티스토리 뷰
반응형
🚀 들어가며...
- React 컴포넌트를 정의할 때에 PureComponent를 사용했었는데, 이 컴포넌트는 도대체 어떤것인지, 왜 사용해야 하는지 알아봅시다.
📑 내용
React에는 3가지 Component들이 존재합니다.
- React.Component
class MainContainer extends Component {
render() {
return (
<div>
Hello
</div>
)
}
}
- React.PureComponent
class MainContainer extends PureComponent {
render() {
return (
<div>
Hello
</div>
)
}
}
- Function Component
const MainContainer = () => {
return (
<div>
Hello
</div>
)
};
각 컴포넌트들의 세세한 특징들이 있겠지만, PureComponent 와 Component의 차이를 설명하자면,
두 컴포넌트의 차이는 shouldComponentUpdate() 라이프 사이클 입니다.
- React.PureComponent는 React.Component에 shouldComponentUpdate()가 적용된 버전입니다.
(엄밀히 말하면 shouldComponentUpdate()안에 얕은비교가 적용된 버전입니다.)
shouldComponentUpdate 에서 변경 여부를 확인하고 Re-render 여부를 결정 지을 수 있지만 그렇기에는 공수가 많이 들기 때문에 PureComponent가 만들어졌습니다.
그렇다면, 어떻게 써야할까요? 몇가지 테스트를 해보았습니다.
[Test1] 부모만 PureComponent (자식들은 일반 Component)
- 부모만 PureComponent일 때는 자식 한명이 바뀌어도 모두 Re-render 됩니다 .
[Test2] 자식1만 PureComponent (부모, 자식2 일반 Component)
- PureComponent 자식1 을 변경 했더니, 다른 자식도 Re-render 되었습니다.
- 하지만 자식2를 변경 했더니, PureComponent인 자식1은 Re-render 되지 않았습니다.
[Test3] 자식 모두 PureComponent (부모 일반 Component)
- 자식 모두 PureComponent로 선언 하니, 서로의 영향을 받지 않았습니다.
- PureComponent는 변경 된 점이 있는지 체크하고, Render 여부를 판단하기 때문에 변경이 되지 않은 PureComponent 자식을 Re-render 시키지 않았습니다.
[Test4] 모두 PureComponent
- 부모 또한, PureComponent 일 때도 Test3 과 같은 방식으로 Render 되었습니다.
- 여기서 우린 부모 Component를 PureComponent로 설정 하는 것은 낭비 라는 것을 알 수 있습니다.
그렇다면.. 어디까지 부모라고 보아야하고,
어디를 PureComponent로 설정해야 할까요?
- 단순하게 생각하면 같은 계층에 컴포넌트가 존재한다면 PureComponent로 만드는게 좋아보입니다.
하지만 이 부분은 단순히 결정할 문제는 아니고, 컴포넌트들의 구조를 짜면서 어디 까지를 그룹화 시킬 것이고, 각 Component들이 어디 까지 영향을 미치게 할지 설계를 하는 부분에서 PureComponent를 정할 수 있을 것입니다.
[더 많은 비용 발생]
(PureComponent를 쓰지 않아, 무분별한 Re-render가 발생) > (의미 없는 PureComponent들의 얕은 비교 연산)
🙋🏻♂️ 후기
- Depth가 깊어지면 깊어질 수록 PureComponent는 단순하지만 어렵습니다. 하지만, TestCase를 이해하게 되면 어떻게 동작 되는지 감이 오실겁니다.
- 이해가 되지 않는다면 Component 보단 PureComponent를 쓰는것을 추천드립니다. 굳이 변화를 비교 할 필요없는 Component들이 PureComponent가 되어 비교를 진행하는 연산 보다는 무분별하게 Re-render 되는 비용이 분명 클 것입니다.
🔗 참고한 글
https://ko.reactjs.org/docs/react-api.html#reactpurecomponent
반응형
'React' 카테고리의 다른 글
[React] Fragment에 대해 알아보자! (0) | 2022.06.30 |
---|---|
[React, JS] 비동기처리는 어떻게 해야할까? (1) | 2022.05.18 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- db
- Named export
- lv2
- react
- lv1
- ORM
- django ORM
- This
- Linux
- JavaScript
- list
- uSWGI
- Default export
- Greedy Algorithm
- Python
- container
- PostgreSQL
- SQL
- django
- 탐욕법
- JS
- MVT
- Master & Slave
- Algorithm
- union-find
- generator expression
- static files
- programmers
- data formatting
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함