HTML&CSS&Javascript 📚/JS
[JS & React] 얕은 비교(Shallow Equal)란 ? / 리액트에서 컴포넌트가 리렌더링되는 경우
킹우현
2023. 7. 18. 13:46
1) 얕은 비교
const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2 };
console.log(obj1 === obj2); // false
원시 타입 데이터의 경우 '값'이 동일한지만 비교하고, 배열과 객체과 같은 참조 타입 데이터의 경우 '참조값'만 비교한다.
2) 깊은 비교
const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2 };
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true
얕은 비교와 달리 깊은 비교는 객체의 경우에도 값으로 비교한다. 깊은 비교 방법은 아래와 같다.
1️⃣ Object depth가 깊지 않은 경우 : JSON.stringify() 사용
2️⃣ Object depth가 깊은 경우 : lodash 라이브러리의 isEqual() 사용
3) 얕은 비교를 언제 사용하는가 ?
1. React.memo()에서 props를 비교할 때
2. React에서 Node를 비교할 때
4) 리액트에서 컴포넌트가 리렌더링 되는 경우 ⭐️
- state의 변경되었을 때
- props가 변경되었을 때
- 부모 컴포넌트가 렌더링 될 때
- shouldComponentUpdate 에서 true가 반환될 때
- forceUpdate가 실행될 때