이롭게 현명하게
[React] 리액트 React.memo 본문
목차
React.memo?
구조
[React.memo?]
React.memo는 고차 컴포넌트(HOC : High Order Component)이다.
컴포넌트가 동일한 props로 동일한 결과를 렌더링한다면 React.memo를 호출하고 결과를 메모이징(Memoizing) 하도록 래핑하여 경우에 따라 성능 향상을 누릴 수 있다.
즉 React는 컴포넌트를 렌더링 하지 않고 마지막으로 렌더링된 결과를 재사용한다.
<정리>
React.memo는 props 변화에만 영향을 준다.
필요한 상황에서만 리렌더링을 하도록 설정한다.
컴포넌트의 props 가 바뀌지 않았다면 리렌더링을 방지한다.
props가 복잡한 객체인 경우 React.memo는 얕은 비교만 한다.
상태 관리 시 함수형 업데이트를 하면 최신 상태를 참조하기 때문에 useCallback의 deps에 넣지 않아도 된다.
컴포넌트를 내보낼 때 React.memo() 함수를 사용한다면 props가 바뀔 때만 리렌더링 해준다.
<React.memo를 사용하는 경우>
- 함수형 컴포넌트인 경우
- 컴포넌트가 같은 props로 자주 렌더링 되는 경우
- 무겁고 복잡한 연산이 있는 경우
<React.memo를 사용하지 않아도 되는 경우>
- 클래스형 컴포넌트인 경우 PureComponent를 확장해서 사용하거나 shouldComponentUpdate()함수를 사용한다.
- 컴포넌트가 다른 props로 자주 렌더링 되는 경우
- 가벼운 프로젝트인 경우
[구조]
const User = React.memo(function Component(props){
// props를 사용하여 렌더링
});
export default React.memo(Component,(propsAreEqual));
React.memo는 props 변화에만 영향을 준다.
그러므로 함수 컴포넌트 안에 구현한 state나 context가 변할 때는 리렌더링된다.
props가 갖는 복잡한 객체에 대하여 얕은 비교만을 수행하는 것이 기본 동작이다.
다른 비교 동작을 원한다면 두 번째 인자로 별도의 비교 함수(PropsAreEqual)를 제공하면 된다.
props가 이전과 동일한 값(true)이면 리렌더링 하지 않고, 다른 값(false)이면 리렌더링한다.
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!
'웹 개발 > React' 카테고리의 다른 글
[React] EmailJS 사용방법 / 자바스크립트로 이메일 보내기 (2) | 2024.04.29 |
---|---|
[React] 리액트 useReducer (0) | 2024.01.18 |
[React] 리액트 useCallback (0) | 2024.01.16 |
[React] 리액트 State란? (0) | 2024.01.15 |
[React] 리액트 props 사용방법 (0) | 2024.01.12 |