출처 - 벨로퍼트
https://react.vlpt.us/basic/19-React.memo.html
React.memo
: 컴포넌트의 props
가 바뀌지 않았다면, 리렌더링을 방지하여 컴포넌트의 리렌더링 성능 최적화
export default React.memo(UserList);
작성한 코드 기준으로 이야기해보자.
하지만, export한 컴포넌트를 React.memo로 감싸도 user의 이름을 클릭하면 user컴포넌트가 모두 리렌더링된다.
그 이유는 다음 코드에서 useCallback
함수에 users
가 디펜던시에 있기 때문에 users
값이 변경되었다 판단하여 렌더링을 하게된다.
const onRemove = useCallback(
id => {
// user.id 가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열을 만듬
// = user.id 가 id 인 것을 제거함
setUsers(users.filter(user => user.id !== id));
},
[users]
);
const onToggle = useCallback(
id => {
setUsers(
users.map(user =>
user.id === id ? { ...user, active: !user.active } : user
)
);
},
[users]
);
useState의 함수형 업데이트를 하여 해결
setUsers(users => users.concat(user))
→ users에 최신 users값이 들어온다
export default React.memo(
UserList,
(prevProps, nextProps) => nextProps.users === prevProps.users);
→ nextProps.users와 prevProps.users가 같지 않을 때에만 리렌더링하겠다.
반응형
'TIL > 리액트' 카테고리의 다른 글
22. Context API를 사용한 전역 값 관리 (0) | 2022.07.29 |
---|---|
20. useReducer를 사용하여 상태 업데이트 로직 분리하기 (0) | 2022.07.28 |
18. useCallback을 사용하여 함수 재사용하기 (0) | 2022.07.23 |
17. useMemo를 사용하여 연산한 값 재사용하기 (0) | 2022.07.22 |
16. useEffect를 사용하여 마운트/언마운트/업데이트 시 할 작업 설정하기 (0) | 2022.07.21 |
댓글