리액트 Hooks와 클로저

2024. 12. 22. 02:35·React

useState는 컴포넌트 내부 로직에서 호출되고 종료되는 함수입니다. 그런데 setState는 어떻게 useState 내부의 state 최신값을 계속해서 확인할 수 있을까요?

클로저가 useState 내부에서 활용되기 때문입니다.

React의 Hooks는 이러한 클로저를 기반으로 만들어져 있으니, 각 Hook이 어떻게 클로저를 활용하는지 자세히 알아보겠습니다.

 

useState

const [count, setCount] = useState(0);
return (
    <button onClick={() => setCount(count + 1)}>
        {count}
    </button>
);

// ❌ 외부에서 직접 수정 불가
count = 100;

// ✅ 오직 setter 함수로만 수정 가능
setCount(100);

 

useEffect

useEffect(() => {
    const timer = setInterval(() => {
        console.log('...');
    }, 1000);
    
    return () => clearInterval(timer);
}, [count]);

// ❌ 외부에서 cleanup 함수 직접 호출 불가
cleanup();

// ✅ effect는 의존성 배열 값이 변경될 때만 실행

 

useCallback

const [count, setCount] = useState(0);
const handleClick = useCallback(() => {
    setCount(c => c + 1);
}, []);
return <button onClick={handleClick}>{count}</button>;

// ❌ 외부에서 메모이제이션된 함수 수정 불가
handleClick = () => {};

// ✅ callback은 의존성이 변경될 때만 재생성

 

useMemo

const expensiveValue = useMemo(() => {
    return someExpensiveCalculation(count);
}, [count]);

// ❌ 외부에서 계산된 값 직접 수정 불가
expensiveValue = 0;

// ✅ memo는 의존성이 변경될 때만 재계산
저작자표시 비영리 변경금지 (새창열림)

'React' 카테고리의 다른 글

React forwardRef와 useImperativeHandle  (0) 2024.12.27
리액트 파이버의 동작  (0) 2024.12.23
useEffect 사용시 주의해야 할 것들  (1) 2024.12.22
React Props: 원시값 vs 참조값 비교하기  (0) 2024.12.22
useState vs useRef vs 일반 JS 초기화  (0) 2024.04.15
'React' 카테고리의 다른 글
  • React forwardRef와 useImperativeHandle
  • 리액트 파이버의 동작
  • useEffect 사용시 주의해야 할 것들
  • React Props: 원시값 vs 참조값 비교하기
URE
URE
Skill: Javascript, ReactJS, Next.js, React Native ... *블로그 이전 작업(24. 04. 11 ~ 24. 04. 15)
  • URE
    Dev++
    URE
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Browser (6)
      • OS (1)
      • Javascript (14)
      • React (19)
      • Next.js (4)
      • React Native (0)
      • Architecture (1)
      • Network (3)
      • 스크랩 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Port
    swr
    참조타입
    react concurrent
    dataFetching
    javascript
    리덕스
    URL
    상태관리라이브러리
    JS
    react
    브라우저
    리액트 코어
    TCP
    IP
    리액트
    Redux
    react18
    원시타입
    자바스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
URE
리액트 Hooks와 클로저
상단으로

티스토리툴바