[React] (Hook) useState vs useRef

2024. 2. 14. 00:51·React
728x90

React에서 변수의 상태나 Form양식의 데이터들을 관리하다 보면 Hook을 사용할 일이 많다. 이 페이지에서는 useState와 useRef의 차이점을 정리하고자 한다. 둘의 차이점을 알아보기 전에 Hook의 개념을 간단하게 알아볼 필요가 있다. 따라서 Hook에 대해 정리하고 useState와 useRef의 차이점에 대해 정리해 보려고 한다.

[목차]

  1. React Hook이란?
  2. useState와 useRef의 비교
    1. 차이점 
    2. 사용 예시
  3. 정리

1. Hook이란?

Hook은 리액트의 함수 컴포넌트에서 상태(React state) 와 생명주기 기능( lifeCycle features)을 연결하는 함수이다.

기존에는 Class형 컴포넌트에서만 상태를 관리할 수 있었고 함수형 컴포넌트에서는 상태를 관리할 수 없었다.

하지만 Hook의 등장으로 Hook을 통해 함수형 컴포넌트에서도 상태 관리를 할 수 있게 되었고, 기존 클래스형 컴포넌트에서만 가능하던 여러 기능을 사용할 수 있게 되었다.

 

2. useRef와 useState의 차이점

1) 기본적인 차이점

useState

  • useState는 주로 컴포넌트의 상태값을 나타내는 값이다.
  • useState는 렌더링 결과에 영향을 주는 값이고 값이 변경될 때 마다 렌더링된다.
  • 주로 컴포넌트의 상태를 관리하고 상태가 변경될 때 UI를 갱신하는 데 사용한다.
 

useRef

  • useRef는 주로 참조를 관리하기 위해 사용된다.
  • 참조는 일반적으로 DOM요소나 컴포넌트 인스턴스를 가리키는 객체이다.
  • useRef를 통해 참조를 생성하면 컴포넌트 함수 내에서 참조를 통해 해당 DOM요소나 컴포넌트 인스턴스에 직접 접근할 수 있다.
  • useRef를 이용하여 컴포넌트 함수 내에서 변수를 유지할 수 있다.
  • useRef는 함수 컴포넌트에서 mutable한 객체를 생성하고 유지할 때 사용됩니다.
  • 리렌더링과 관련이 없이 값을 저장하고 유지할 수 있습니다.
  • useRef로 생성된 객체는 변경되어도 컴포넌트가 다시 렌더링되지 않습니다.
  • 주로 DOM 요소에 접근하거나 컴포넌트의 생명주기와 독립적으로 값을 유지할 때 사용됩니다.

 2) 사용 예시

ex) useState

import React, { useState } from 'react';

function ExampleComponent() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p> Click한 횟수: {count}회</p>
      <button onClick={() => setCount(count + 1)}>
        Click me!
      </button>
    </div>
  );
}
 
 
ex) useRef
import React, { useRef, useEffect } from 'react';

function ExampleComponent() {
  const countRef = useRef(0);

  useEffect(() => {
    console.log("Component did mount");
  }, []);

  const handleClick = () => {
    countRef.current += 1;
    console.log("You clicked", countRef.current, "times");
  };

  return (
    <div>
      <button onClick={handleClick}>
        Click me
      </button>
    </div>
  );
}
 
 
 
 

요약

 useState는 컴포넌트의 상태를 다룰 때 사용되고, 이로 인해 컴포넌트가 리렌더링됩니다. 반면에 useRef는 리렌더링과 무관하게 값을 유지하고 주로 DOM에 접근하거나 생명주기와 관련이 없는 값을 관리할 때 사용됩니다.

 

정리하자면, 상태의 변화에 따라 UI가 실시간으로 업데이트되어야 하는 경우 useState를 사용하고, 리렌더링과 관계없이 값만 유지하면 되는 경우 useRef를 사용하는 것이 일반적이다.

 
useState 는 컴포넌트 상태를 관리하는 값이고
useRef는 참조를 생성하여 관리합니다
 
useState는 값이 변경이 될 때 마다 렌더링이 되지만 useRef는 렌더링과 상관없이 참조를 관리합니다

 

 

https://uou413.tistory.com/57

 

[React]Hooks함수 정리1(useState, useRef, useEffect, useContext)

용어 정리 ● 렌더(render) : 화면에 그리다(생성) ● 리렌더링/업데이트: 재정의/변경 (변수가 바뀔때는 리렌더링 안함!!!) 변경 하려면!!!!!! 1) 부모요소가 주는 props가 변경 되었을 때!!! 2) 상태가

uou413.tistory.com

https://ko.legacy.reactjs.org/docs/hooks-reference.html#useref

 

Hooks API Reference – React

A JavaScript library for building user interfaces

ko.legacy.reactjs.org

 

728x90
저작자표시 비영리 (새창열림)

'React' 카테고리의 다른 글

[React 톱아보기] React 톺아보기 시리즈 소개  (0) 2024.02.23
[React] 11. React에서 클린코드 구현하기  (5) 2024.02.17
[React] 반복문으로 component 생성하기  (0) 2024.02.13
[React] 리액트 라우터(React Router) 사용하기  (0) 2024.02.13
[React] form 양식에서 휴대폰 번호 정규식 유효성 검사하기  (0) 2024.02.06
'React' 카테고리의 다른 글
  • [React 톱아보기] React 톺아보기 시리즈 소개
  • [React] 11. React에서 클린코드 구현하기
  • [React] 반복문으로 component 생성하기
  • [React] 리액트 라우터(React Router) 사용하기
BE_개발자
BE_개발자
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
    250x250
  • BE_개발자
    경이로운 개발일기
    BE_개발자
  • 전체
    오늘
    어제
    • 전체 보기 (213)
      • AI (1)
        • AI native (0)
        • Skill (0)
      • SpringBoot (4)
        • JPA (3)
        • Security (0)
        • 튜토리얼 (1)
        • 기타 (0)
      • Infra (0)
        • Docker (0)
        • AWS (0)
        • NCP (0)
        • GCP (0)
      • React (19)
      • 서버 (0)
      • Computer Science (16)
        • SW Engineering (10)
        • Data Base (2)
        • OS(운영 체제) (4)
      • Data science (0)
        • Probability & Random Variab.. (0)
        • Data Analysis(데이터 분석) (0)
      • 자료구조 | 알고리즘 (57)
        • 선형 자료구죠 (6)
        • 비선형 자료구조 (9)
        • 정렬(Sort) (3)
        • 탐색(Brute Force) (7)
        • 분할 정복(Devide Conquer) (3)
        • 동적 계획법 (6)
        • 탐욕(Greedy) (2)
        • 수학 (7)
        • 심화 알고리즘 (10)
      • PS (44)
        • 백준 알고리즘[BOJ] (38)
        • 프로그래머스[programmers] (3)
      • Dev tool (15)
        • 개발 도구 및 환경 (0)
        • vscode (3)
        • Git Hub (4)
        • Chrome 웹스토어 (5)
        • Python 전용 개발환경 (0)
      • 성장기록 (1)
      • 개인 project (14)
        • 홈페이지 만들기 (11)
        • 냉보미 (1)
      • STL(Standard Library) (9)
      • programming Language (1)
        • javascript (1)
      • 기타 (13)
        • html css (11)
      • (책, 글, 블로그)리뷰 (3)
  • 블로그 메뉴

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

    • 백준
    • Github
    • Notion
    • 서울과학기술대학교 학술동아리 EC
  • 공지사항

  • 인기 글

  • 태그

    백트래킹
    완전 탐색
    SW Engineering
    백준
    수학
    react
    SW 공학
    스프링부트
    순열
    OS
    알고리즘
    탐색
    stack
    프론트엔드
    BFS
    자료구조
    브루트포스
    괄호쌍
    운영체제
    stl
    DP
    분할정복
    비트마스킹
    재귀함수
    이분 탐색
    PS
    스택
    CS
    C++
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
BE_개발자
[React] (Hook) useState vs useRef
상단으로

티스토리툴바