translation

AI가 번역한 다른 언어 보기

Sunrabbit

[React Hook] useState

  • 작성 언어: 한국어
  • 기준국가: 모든 국가country-flag
  • IT
프로필 이미지

durumis AI가 요약한 글

  • React의 useState 훅은 컴포넌트의 상태값을 저장하고 변경 시 리렌더링을 통해 UI를 업데이트하는 데 사용됩니다.
  • useState는 컴포넌트 전체를 리렌더링하지만 가상 DOM을 활용하여 실제 DOM 변경은 최소화합니다.
  • useState의 내부 구현은 linked list 기반으로, 현재 렌더링되는 컴포넌트와 hook을 연결하여 상태값을 유지하고 업데이트 이벤트에 따라 다른 함수를 호출합니다.

이상하게 리액트 동네는 use가 붙은걸 참 좋아한다

useServer, useCallback, useState, useMemo 등

커스텀 훅들도 다 use가 붙는다

어디서 시작된거지


useState는 유명한 훅이다.

상태값을 저장하고, 바뀌면 리렌더링한다. 되게 간단하다.

모두가 아는 그 예제다.


상태값이 바뀌면 리렌더링이 된다 했는데 리렌더링 되는 스코프는 어떻게 되는걸까?

p tag만? 아님, button 태그까지?


정답은 useState가 호출된 컴포넌트 전체다.

ExampleComponent를 리렌더링하지만

가상돔을 이용해서 값을 비교해서 다른곳만 DOM을 수정한다고 한다.


useState는 매 리렌더링마다 호출되는데, 어떻게 값이 유지될까?

이는 useState의 구조로부터 답이 나온다.

위 코드는 실제 리액트 useState 코드다.


전역 객체에서 dispatcher를 땡겨와서 useState를 쏜다.

이걸로는 구조가 이해가 안된다.


더 파보면 다음과 같은 코드가 나온다.

hook을 가져와서 set함수를 직접 hook에 있는 queue를 bind해서 준다.

(bind는 기존 함수에 this를 바인딩 시키고, 나머지 인자값은 해당 함수의 인자값으로 쓴 뒤, this가 binding 된 새로운 함수를 리턴한다)


이걸로는 이유를 파악하기 힘들다.

좀 더 파보자


매번 init값을 할당해주는걸 볼 수 있다. 이러면 state가 유지되는게 설명이 안된다.

좀 더 파보자. hook이 뭔가 수상해보인다.

currentlyRenderingFiber와 workInProgressHook은 전역변수다.

오른쪽에서부터 할당이 시작되는걸 이용해서 링크드리스트를 구현한 모습이다.


그래서 훅을 까보면 다음과 같은 구조로 예상된다.

말머리에 값이 계속 추가되는 모습이다.


여전히 설명이 안되서 다른 useState 구현체를 본 결과

모두 mountState를 호출하는게 아니였고, 리렌더링 될 경우 updateState, rerenderState를 호출하는거였다.

고로, 구조는 위와 같으며 이벤트에 맞게 다른 함수들이 호출된다는 것이다.

직접 코드를 보고싶으면 react/packages/react-reconciler/src/ReactFiberHooks.js를 참고하면 된다.

nuxt.js에서 커스텀 디렉티브 만들기Nuxt.js에서 커스텀 스크롤 디렉티브를 만드는 방법을 설명하는 글입니다. bind, inserted, update, componentUpdated, unbind 등의 훅 함수 활용법과, Nuxt plugin 등록 방법을 다룹니다.
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들

2024년 9월 28일

[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라불필요한 객체 생성은 메모리 낭비를 초래하므로, 문자열이나 Boolean과 같은 객체는 리터럴이나 정적 팩터리 메서드를 사용하는 것이 좋습니다.
제이온
제이온
제이온
제이온

2024년 4월 28일

[비전공, 개발자로 살아남기] 14. 신입 개발자 자주 묻는 기술면접 내용 요약신입 개발자 면접에서 자주 나오는 기술 질문(메모리 영역, 자료구조, 데이터베이스 등)을 요약하여 정리했습니다. 개발 면접 준비에 도움이 되길 바랍니다.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024년 4월 3일

리액트 - kakao is not defined 어떻게 해결하는게 좋을까리액트에서 카카오맵 API를 사용할 때 kakao is not defined 오류 해결 방법을 소개합니다. 컴포넌트 외부에서 kakao 객체를 선언하거나 커스텀 훅을 사용하면 해결할 수 있습니다.
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들

2024년 9월 2일

Embedded Recipes(1)임베디드 시스템 입문서 'Embedded Recipes(1)' 1장 내용을 정리한 블로그 글입니다. 회로도 읽기, 신호, 주파수, 필터, 트랜지스터 등을 다룹니다.
dohun p
dohun p
dohun p
dohun p

2024년 7월 28일

Flitter 1.0.0 출시: D3를 대체할 svg 라이브러리Flitter 1.0.0은 SVG 기반 데이터 시각화 라이브러리로, React와의 호환성을 강화하고 SSR 지원을 개선했습니다. 성능 향상 및 버그 수정도 포함되어 있습니다.
Meursyphus
Meursyphus
Meursyphus
Meursyphus

2024년 5월 1일