미새문지

Controlled Component와 Uncontrolled Component 본문

개발 TIL

Controlled Component와 Uncontrolled Component

문미새 2025. 1. 14. 15:17
728x90

Controlled Component와 Uncontrolled Component

Controlled Component

  • 입력값이 State를 통해 제어되는 컴포넌트이다.
  • 입력 요소의 value는 리액트 상태와 동기화되며, 사용자가 입력을 변경할 때마다 onChange 이벤트 핸들러가 호출되어 상태를 업데이트한다.
  • 장점:
    • 리액트 상태로 관리되므로 입력값을 실시간으로 검증하거나 수정하기 쉽다.
    • 여러 입력 필드 간의 복잡한 의존 관계나 동적인 폼 로직 처리에 적합하다.
import React, { useState } from 'react';

const ControlledInput = () => {
  const [value, setValue] = useState("");

  const handleChange = (e) => {
    setValue(e.target.value);
  };

  return (
    <input 
      type="text" 
      value={value} 
      onChange={handleChange} 
    />
  );
};

export default ControlledInput;

 

 

Uncontrolled Component

  • 입력값이 DOM 자체에서 관리되기 때문에, 리액트는 이를 제어하지 않는 컴포넌트이다.
  • ref를 사용하여 DOM 요소에 직접 접근해 값을 읽거나 조작할 수 있으며, 리액트 상태를 사용하지 않아 DOM  자체가 입력값을 제어한다.
  • 장점:
    • 단순한 폼이나 초기값만 중요한 경우 구현이 간단하다.
    • 상태 업데이트로 인한 렌더링 오버헤드가 없기 때문에 성능에 유리할 수 있다.
import React, { useRef } from 'react';

const UncontrolledInput = () => {
  const inputRef = useRef(null);

  const handleSubmit = () => {
    alert(`Input Value: ${inputRef.current.value}`);
  };

  return (
    <div>
      <input type="text" ref={inputRef} />
      <button onClick={handleSubmit}>Submit</button>
    </div>
  );
};

export default UncontrolledInput;

 

사용해야 할 때

Controlled Component

  • 이메일 형식이나 비밀번호 유효성 검사 등, 입력값을 실시간으로 검증해야 할 때나 입력값이 다른 컴포넌트 또는 비즈니스 로직에 영향을 줄 때 사용한다.

Uncontrolled Component

  • 성능이 중요한 간단한 폼을 처리할 때, 입력값에 대한 실시간 검증이나 동기화가 필요하지 않을 때 사용한다.
728x90

'개발 TIL' 카테고리의 다른 글

브라우저 렌더링 파이프라인  (0) 2025.01.17
리액트 성능 최적화 방법  (0) 2025.01.15
Props와 State  (0) 2025.01.13
이벤트 루프 (Event Loop)  (0) 2025.01.10
Tanstack-query  (0) 2025.01.09