inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

(3.7) 투두리스트 기능 구현하기

input 입력시 리스트 리렌더링 질문입니다.

74

조민영

작성한 질문수 2

1

말그대로 input 입력시 리스트가 리렌더링 되는거로 데브툴에서 보이는데 리스트 리렌더링이 안되게 하려면 어떻게 해야 하나요?

일전 한입리액트에서는 contextApI를 사용해서 그런가 생각을 하고 넘어갔었는데 지금도 동일하네요.

react typescript react-query supabase zustand

답변 2

1

이정환 Winterlood

안녕하세요 조민영님 이정환입니다.

뭔가 이상해서 확인해보니 React Developer Tools의 리렌더링 감지가 살짝 이상하게 이루어지고 있는것 같아요

console.log를 통해 리렌더링을 확인해보면 아래 그림과 같이 새로운 Todo가 추가될 때에만 TodoItem 컴포넌트가 리렌더링 되는데, React Developer Tools는 Input에 입력시에 매번 리렌더링이 되는걸로 표기가 되네요

image.png

따라서 결론적으로 현재 따라서 결론적으로, 현재 TodoItem 컴포넌트는 실제로는 불필요하게 리렌더링되고 있지 않다고 보시면 좋을 것 같습니다.

요 내용과 관련해 조금 더 조사해보고 추가적인 정보가 있으면 답변 추가해 두겠습니다 !_!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 조민영님, 질문 주셔서 감사합니다.

React에서 input에 값을 입력할 때마다 리스트 컴포넌트가 리렌더링되는 문제는 종종 발생하는 상황입니다. 주로 상태 관리나 props의 변화 때문에 발생하는 경우가 많습니다. 다음 몇 가지 방법을 통해 리렌더링 문제를 해결할 수 있습니다:

  1. React.memo 사용: 리스트 컴포넌트를 React.memo로 감싸면 props가 변경되지 않는 한 해당 리스트 컴포넌트를 리렌더링하지 않도록 할 수 있습니다. 이를 통해 리렌더링 성능을 최적화할 수 있습니다.

    import React, { memo } from 'react';
    
    
    const ListComponent = memo(({ items }) => {
      // 리스트 렌더링 로직
      return (
        <ul>
          {items.map(item => (
            <li key={item.id}>{item.name}</li>
          ))}
        </ul>
      );
    });
    
    
    export default ListComponent;
    
  2. useCallback 사용: 리스트에 전달되는 함수형 props가 있다면 useCallback을 사용하여 메모이제이션할 수 있습니다. 이는 해당 함수가 불필요하게 재생성되는 것을 방지하여 컴포넌트 리렌더링을 줄입니다.

  3. Component 구조 재조정: input과 리스트가 너무 가까운 상위 컴포넌트에서 상태를 공유하고 있는 경우, 컴포넌트를 분리하여 상태 변경이 불필요하게 영향을 미치지 않도록 구조를 재조정할 수 있습니다.

관련하여 유사한 상황에 대해 논의된 질문과 답변을 추천드립니다:
- Checkbox를 누르는데 왜 Editor가 리렌더링되나요?
- 일기 추가 시 DiaryEditor 리렌더링 질문

위 질문과 답변을 통해 React.memo, useCallback 및 전역 상태 관리에 대한 좀 더 심화된 이해를 얻으실 수 있습니다.

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

회원가입 구현 (구현 후 최종 화면 출력 X)

0

65

2

(6.11) 회원가입시 프로필 정보 자동 생성하기 Q. 호출 순서 문의

0

56

1

명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이

0

58

2

useMutation 적용 후 새로운 글 등록시 content가 안보여요

0

70

2

6.8 zustand 세션 질문입니다.

0

110

2

next.js 강의에서도 리액트 라이브러리들을 다뤄주시나요?

0

93

2

shadcn에서 radix ui와 base ui 차이는 뭔가요?

1

406

2

updateTodo 함수 생성시 화살표 함수 사용 안하는 이유

0

84

2

4.11 바로 투두 삭제가 안됨 질문

0

102

3

매개변수 updatedTodo 관련 질문

0

79

3

인증 정보가 만료되었을 때 라우트 가드 처리가 궁금합니다!

0

91

2

supabase를 사용하지 않을 경우 세션 데이터의 변경을 감지하고 스토어에 보관하는 방법이 궁금합니다!

0

85

2

4.6 id를 string으로 변경시 오류

0

74

2

리액트 타입스크립트 관련 질문있습니다.

0

71

1

소셜 로그인 구현하기 관련하여 질문이 있습니다!

0

108

2

ui 파일 질문드립니다.

0

90

1

tanstack query devtools에서 질문있습니다!

0

75

2

댓글 삭제 시 isPending 질문

0

72

2

두번째 예외상황에 대해 질문있습니다!

0

70

1

리액트 쿼리 질문입니다

1

85

2

개발자도구에서 components 가 안보입니다.

0

109

3

state 관리에 대한 정리

0

88

3

[(2.4) Shadcn/ui를 소개합니다] 강의 Shadcn 세팅 관련 질문 있습니다.

0

213

3

like 테이블에서 왜 create_at이 필요한지 궁금합니다.

0

87

1