인프런 커뮤니티 질문&답변

Boom님의 프로필 이미지
Boom

작성한 질문수

프론트엔드 개발자를 위한, 실전 웹 성능 최적화(feat. React) - Part. 2

4-5) useSelect 렌더링 문제 해결

맨마지막~

해결된 질문

작성

·

211

1

31분 52초 화면만 보고 질문 드립니다 :)

photos를 외부로 옮긴 다음 PhotoList의 프롭으로 photos를 넘기게 되면 PhotoList 입장에서는 프롭이 변경된것이라고 판단 되어서 리렌더링이 될 것이라고 생각했는데 PhotoListContainer자체가 photos의 필터 연산을 외부로 옮기는 방식으로 리렌더를 하지 않기 때문에 자식 컴포넌트 자체도 리렌더링이 안되는 것이 되는 건가요?

 

답변 1

0

유동균님의 프로필 이미지
유동균
지식공유자

안녕하세요, Boom님,

photos 데이터 가공에 따른 PhotoList 컴포넌트의 렌더링 타이밍에 대해서 질문을 주셨는데요,

처음에 말씀해주신 "PhotoList 입장에서는 프롭이 변경된것이라고 판단 되어서 리렌더링이 될 것이라고 생각했는데" 이 내용이 맞습니다.

다만, useSelector 는 redux state가 변화가 있으면 명시된 값(photos, loading)에 대해서 이전 상태와 새로 변경된 redux state에서의 상태를 비교합니다.
이 때, 실제 구독하는 데이터는 변경되지 않았지만, 리렌더링이 됐던 이유는 filter 함수로 인해 새로운 photos 객체가 만들어져서 데이터가 변경되었다고 판단하기 때문입니다.

그래서 filter 로직을 밖으로 뺌으로써 category, photos.data, loading 상태 외의 다른 상태 변화로 부터 영향을 받지 않도록 한 겁니다.

자세한 내용은 10:56 부분을 참고하시면 좋을 것 같습니다.

그럼 답변이 도움되셨길 바라며, 강의에 관심을 가져주셔서 감사합니다. :)

Boom님의 프로필 이미지
Boom

작성한 질문수

질문하기