inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

10.3) React.memo와 컴포넌트 렌더링 최적화

10.3강 React.memo와 컴포넌트 렌더링 최적화 질문

74

donghun Kang

작성한 질문수 4

0

export default memo(TodoItem, (preProps, nextProps) => { if (preProps.id !== nextProps.id) return false; if (preProps.isDone !== nextProps.isDone) return false; if (preProps.content !== nextProps.content) return false; if (preProps.date !== nextProps.date) return false; return true; }

사실상 isDone 빼고 바뀌는 게 없으니 if 부분 지울 수도 있나요? 아니면 위험한가요?

javascript react node.js 카카오공채-개발

답변 2

0

이정환 Winterlood

안녕하세요 donghun Kang님 이정환입니다.

isDone이 다를 때에만 return true가 되도록 조건문을 조정하셔도 됩니다! 반환값만 같다면 동일하게 동작합니다.

PS. 줄바꿈이 잘 적용되어 있지 않아 코드 해석이 살짝 어렵네요 🥲 다음부터는 가급적 VSCode 에서 포맷팅 되어 있는 코드로 올려주시면 감사하겠습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. donghun Kang님.

질문해 주신 내용은 React.memo를 사용할 때 props 비교 함수를 커스터마이징 하여 특정 조건에서만 컴포넌트가 리렌더링 되는지 여부를 결정하는 부분에 관한 것입니다. 특히, TodoItem 컴포넌트에서 prePropsnextPropsid, isDone, content, date를 비교하여 컴포넌트 리렌더링 여부를 결정하고 계신데요.

현재 주어진 로직에서 React.memo를 통한 비교 함수는 false를 반환하여 모든 조건을 만족했을 때만 렌더링을 막습니다. 만약 isDone 외에는 바뀌지 않는다는 확신이 있을 경우, 다른 항목을 생략해도 될 수 있지만 이는 props의 변경 가능성에 대한 철저한 검증이 필요합니다.

잠재적인 위험성

  1. 데이터 일관성: isDone만이 주기적으로 변경된다고 하더라도, 다른 props가 변경될 가능성도 존재할 수 있습니다. 만약 미래에 기능이 변경되거나 다른 props가 업데이트된다면 데이터가 적절히 반영되지 않을 위험이 있습니다.

  2. 미래 유지보수: 코드가 단순 검토 시에는 더 명확한 의도를 드러내지만, 데이터 변경 내역을 추적하려면 이제 더 주의해야 합니다.

추천 자료 및 링크

기존에 유사한 상황을 겪었던 다른 질문과 답변들을 통해 더욱 깊은 이해를 얻는 것도 유익할 것 같습니다. 아래의 링크들을 참고하세요:

이러한 링크들은 React.memo를 활용하여 리랜더링 최적화에 대해 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

존재하지 않는 일기 url입력 시 alert이 두 번 떠요

0

28

1

교재(3쇄)와 강의 내용 문의

0

33

2

12.13) 하단 여백 스타일링 관련 질문 드립니다.

0

66

2

에러 질문드립니다

0

63

2

VSCode 설정 문의

0

67

2

PPT 코드 관련 질문

0

49

2

useEffect와 lifecycle문의

0

64

2

프론트엔드 학습 수준 문의

0

78

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

70

2

데이터 로딩중 화면만 계속 나와요!!

0

72

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

101

2

이후의 커리큘럼 문의

0

125

2

실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.

0

73

2

최적화 관련 질문있습니다 (useMemo 등)

0

103

3

프로바이더 컴포넌트의 위치는 어떤 기준인가요?

1

95

3

Date 객체에 관련하여 질문드립니다.

0

96

2

리액트 개정판 교재 질문

0

76

2

예제코드가 안나와요!

0

86

2

select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com

0

130

2

onMouseEnter 관련 문의 드립니다

0

110

3

배열의 렌더링 관련 질문 드립니다.

0

83

2

2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.

0

133

2

TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?

0

151

2

useCallback 적용한 onCreate, onUpdate, onDelete 함수..

0

73

1