본문 바로가기
React/1

React Hooks

by lacuca9 2024. 11. 1.

Hook:

함수형 컴포넌트 내에서 상태 관리생명 주기 관련 기능을 사용할 수 있도록

특별히 설계된 함.

 

useState :

가장 기본적인 hook, 함수 컴포넌트에서 가변적인 상태를 가지게 해줌.

 

함수형 업데이트 :

// 기존에 우리가 사용하던 방식
setState(number + 1);

// 함수형 업데이트 
setState(() => {});

 

함수형 업데이트 방식은 동시에 명령을 내리면, 그 명령을 모아 순차적으로 실행

 

useEffect

컴포넌트가 렌더링될 때마다 특정 작업을 수행하도록 설정할 수 있는 Hook

 

의존성 배열(dependency array)

해당 배열에 값을 넣으면 그 값이 바뀔 때만 useEffect를 실행

// useEffect의 두번째 인자가 의존성 배열이 들어가는 곳 입니다.
useEffect(()=>{
	// 실행하고 싶은 함수
}, [의존성배열])

 

 

useRef

DOM요소에 접근할 수 있도록 하는 Hook

 

1. state는 리렌더링이 꼭 필요한 값을 다룰 때 쓰면 된다

2. ref는 리렌더링을 발생시키지 않는 값을 저장할 때 사용한다

 

 

useContext

props가 너무 깊어지면 prop drilling 현상이 일어남.

출처 : https://www.copycat.dev/blog/react-context/

 

 

useContext hook을 통해 전역 데이터를 관리 할 수 있게 됨.

context API 필수 개념

  • createContext : context 생성
  • Consumer : context 변화 감지
  • Provider : context 전달 (to 하위 컴포넌트)

React Hooks 최적화 (React.memo, useCallback, useMemo)

불필요한 렌더링이 발생하지 않도록 최적화하는 대표적인 방법이 바로

  • memo(React.memo) : 컴포넌트를 캐싱
  • useCallback : 함수를 캐싱
  • useMemo : 을 캐싱

memo :

부모 컴포넌트가 리렌더링 되면 자식컴포넌트는 모두 리렌더링

자식은 리렌더링이 필요없는 경우에 사용

export default React.memo(Box1);

 

 

useCallback :

인자로 들어오는 함수 자체를 기억(메모이제이션) 한다.

# useCallback hook의 적용

// 변경 전
const initCount = () => {
  setCount(0);
};

// 변경 후
const initCount = useCallback(() => {
  setCount(0);
}, []);

 

의존성 배열 :

함수나 상태를 효율적으로 관리하기 위해 사용, 배열 안에 나열된 값들이 변경되었을 때만 훅이 다시 호출

const initCount = useCallback(() => {
  setCount(0);
}, [count]);

 

useMemo :

맨 처음 해당 값을 반환할 때 그 값을 특별한 곳(메모리)에 저장함.

필요할 때 마다 다시 함수를 호출해서 계산하는게 아니라 이미 저장한 값을 단순히 꺼내와서 쓸 수있다.

이러한 기법을 캐싱이라 한다.

 

 

DOM : (Document Object Model)

수 많은 컴포넌트로 구성된 웹페이지를 문서(document)라 한다.

페이지를 이루는 컴포넌트를 엘리먼트(element) 라 한다.

DOM은 이 엘리먼트를 tree 형태(= DOM TREE)로 표현한 것

 

'노드'접근과 제어(DOM 조작)를 할 수 있는 API를 제공

API : HTML 요소에 접근해서 수정할 수 있는 함수

 

 

Virtual DOM : 

가상 DOM은 실제 DOM과 구조가 완벽히 동일한 복사본 형태

객체(object) 형태로 메모리에 저장되기 때문에 실제 DOM을 조작하는 것보다  빠릅.                                                                     

[STEP 1]

2 가지 버전의 가상DOM 가짐.

1. 화면이 갱신되기 전 구조가 담긴 가상DOM 객체

2. 화면 갱신 후 보여야 할 가상 DOM 객체

 

[STEP 2 : ddiffing]

state가변경되면 2번에서 갱신된 가상돔과 1번에서 이미 갖고있던 가상돔을 비교해서

어느 엘리먼트에서 변화가 일어났는지를 빠르게 파악

 

[STEP 3 : reconcilliation]

변경이 일어난 그 부분만 실제 DOM에 적용.

변경사항 모두 모아 한 번만 적용

 

 

 

 

 

 

 

 

 

 

'React > 1' 카테고리의 다른 글

why React  (0) 2024.11.02
Redux  (0) 2024.11.01
CSS-in-Js  (0) 2024.10.31
Component & Rendering  (0) 2024.10.30
State  (0) 2024.10.30