
React에서는 <input>, <textarea> 등의 폼 요소를 사용할 때
입력 값을 어떻게 관리하느냐에 따라 두 가지 방식으로 나뉜다:
React의
state를 통해 입력 값을 관리하는 방식
value 속성을 상태값과 동기화onChange로 상태를 업데이트import { useState } from 'react';
function ControlledInput() {
const [text, setText] = useState('');
const handleChange = (e) => setText(e.target.value);
return (
<div>
<input type="text" value={text} onChange={handleChange} />
<p>입력한 값: {text}</p>
</div>
);
}
입력 값이 DOM 자체에 저장되고, React가 직접 제어하지 않는 방식
useRef를 통해 DOM에 접근import { useRef } from 'react';
function UncontrolledInput() {
const inputRef = useRef(null);
const handleSubmit = () => {
alert(`입력한 값: ${inputRef.current.value}`);
};
return (
<div>
<input type="text" ref={inputRef} />
<button onClick={handleSubmit}>제출</button>
</div>
);
}
| 상황 | 추천 방식 |
|---|---|
| 실시간 유효성 검사 필요 | Controlled Component |
| 폼 데이터를 서버에 제출만 하면 됨 | Uncontrolled Component |
| 복잡한 폼 로직 (다중 입력/조건부 렌더링 등) | Controlled Component |
| 간단한 입력 필드 또는 빠른 성능이 필요한 경우 | Uncontrolled Component |
React에서 두 방식은 서로 대체 가능한 것이 아니라 용도에 맞게 선택하는 것이 중요하다!
두 방식을 모두 익혀두면 상황에 따라 적절한 구현이 가능하다. 💪