inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

8.4) Create - 투두 추가하기

useRef를 사용하는 이유

해결된 질문

143

작성자 없음

0

todo list 구현 중 id 값을 변경할 때 useState가 아닌 useRef를 사용하는 이유가 무엇인가요? useRef를 사용하는 이유와 사용되는 경우를 아직 이해하지 못해 조금 더 자세하게 알려주시면 감사하겠습니다ㅠ

javascript react node.js

답변 2

2

이정환 Winterlood

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

결론부터 말씀드리면 useState는 값이 변경될 경우 컴포넌트를 리렌더링 시키지만, useRef의 경우 값이 변경되어도 컴포넌트를 리렌더링 시키지 않기 때문입니다.

 

TodoList 구현 중에 사용되는 id 값은 단순히 새로운 아이템이 추가될 때 1씩 증가하기만 하면 될 뿐 화면에 렌더링되지 않는 값 입니다. 해당 컴포넌트 내에서 화면에 렌더링 되는 값은 todos State 뿐이죠

따라서 id 값을 State에 보관하게 되면 비효율적입니다. 화면에 실시간으로 렌더링 되지도 않을 값을 굳이 State에 보관하게 되면 이 값이 변경될 때 마다 컴포넌트가 리렌더링되어 화면을 다시 그려내야 하기 때문입니다. 반면 useRef를 통해 보관하게 되면, 값이 변경되더라도 컴포넌트를 리렌더링 시키지 않습니다.

 

따라서 결론적으로! useRef와 useState는 다음과 같은 기준으로 나누어 사용하시면 됩니다.

  • useRef : 화면에는 나타나지 않아도 되는 값

  • useState : 화면에 실시간으로 렌더링 되어야 하는 값, 변경시 컴포넌트가 리렌더링 된다.

 

useRef에 대해 완벽히 감이 잘 안오신다면 이전 강의(5.10 챕터)를 꼭 다시 수강하시길 권장드립니다.

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
hrkim0529님, useRef를 사용하는 이유에 대해 질문해 주셨는데요, 이에 대해 도움이 될 만한 기존의 답변들을 안내해 드리겠습니다.

useRef와 useState의 차이점

useRefuseState는 React에서 상태 및 DOM 요소를 다루기 위한 두 가지 훅입니다. 주요 차이점은 다음과 같습니다:

  1. 리렌더링 여부:

    • useState: 상태가 업데이트되면 컴포넌트가 리렌더링됩니다. 따라서 화면에 상태 변화가 반영되어야 할 때 사용합니다.
    • useRef: 값이 변경되어도 컴포넌트가 리렌더링되지 않습니다. 따라서 상태 변화가 화면과 직접적으로 연관되지 않을 때 사용합니다.
  2. 사용 예제:

    • useRef: 주로 현재 렌더링과 무관하게 값이 변경될 때 사용합니다. 예를 들어, DOM 접근, 비동기 작업의 상태 저장, 이전 prop 또는 state 기억.
    • useState: UI 갱신이 필요할 때 사용합니다. 예를 들어, 사용자 입력 값, UI 상태 등의 관리.

관련 질문 및 답변 링크

질문하신 내용과 관련하여 위의 링크를 통해 이해를 돕게 되길 바랍니다.

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

Editor Component의 최적화 불가능 이슈

0

37

2

useCallback ⊂ useMemo

0

34

2

라이브러리 설치 질문

0

33

2

linter 질문

0

40

2

감정일기장 vercel 배포 후 새로 고침 시 404페이지가 뜨는 이유

0

40

2

Sort 메서드 관련 아티클

0

43

2

4.1) React.js를 소개합니다 강의를 듣고 궁금한 점이 생겼습니다.

0

45

2

html, body에 적용하는 css 스타일 질문입니다.

0

38

2

eslint.config.js 설정 질문입니다.

0

90

2

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

0

66

1

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

0

65

2

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

0

87

2

에러 질문드립니다

0

104

2

VSCode 설정 문의

0

137

2

PPT 코드 관련 질문

0

66

2

useEffect와 lifecycle문의

0

87

2

프론트엔드 학습 수준 문의

0

107

2

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

0

110

2

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

0

100

2

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

0

129

2

이후의 커리큘럼 문의

0

151

2

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

0

106

2

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

0

126

3

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

1

124

3