사용자가 선택해야 하는 모든 것을 의미
사용자로부터 입력을 받기 위해 사용
HTML Form vs React Form
React는 컴포넌트 내부에서 state를 통해 데이터를 관리
HTML Form은 Element 내부에 각각의 state가 존재
HTML Form 예시
<form>
<label>
이름:
<input type = "text" name = "name" />
</label>
<button type = "submit">제출</button>
</form>
<!-- HTML Form은 자바스크립트 코드를 통해
사용자가 입력한 값에 접근하기에는 불편한 구조 --!>
사용자가 입력한 값에 접근하고 제어할 수 있도록 해주는 컴포넌트
값이 리액트의 통제(접근 및 제어)를 받는 Input Form Element

HTML Form은 각 element가 자체적으로 state를 관리
→ 자바스크립트 코드를 통해 각각의 값에 접근하여 제어하기 어려움
Controlled Component는 모든 데이터를 state에서 관리, state값을 변경시 setState()함수를 사용
→ React에서 모든 값을 통제할 수 있음.
함수 컴포넌트에서는 useState() hook을 사용하여 state를 관리
function NameForm(props){
const [value, setValue] = useState('');
const handleChange = (event) => {
setValue(event.target.value);
}
const handleSubmit = (event) =>{
alert('입력한 이름: ' + value);
event.preventDefault();
}
return(
<form onSubmit = {handleSubmit}>
<label>
이름:
<input type="text" value={value} onChange={handleChange} />
</label>
<button type = "submit">제출</button>
</form>
)
}
// 모든 입력값을 대문자로 변환
const handleChange = (event) => {
setValue(event.target.value.toUpperCase());
}
// 모든 입력값을 소문자로 변환
const handleChange = (event) => {
setValue(event.target.value.toLowerCase());
}
// 모든 입력값에서 공백 제거
const handleChange = (event) => {
setValue(event.target.value.Trim());
}



input, textarea, select 태그를 Controlled Component로 만드는 방법은 모두 비슷함.
value attribute를 통해 state 값을 전달하고,
값을 변경할 때는 onChange에서 setValue()를 사용하여 값을 업데이트
위 방식은 실제로 사용자 입력을 받는 컴포넌트를 만들 때 사용!

Multiple Inputs 예시
아래의 함수 컴포넌트는 아침 식사 여부와 방문객 수가 별도의 useState() hook로 선언되어 있음
함수 컴포넌트에서는 각 state의 변수마다 set 함수가 따로 존재
→ 각각의 set 함수를 사용하여 값을 구현 및 업데이트한다.
![]() | ![]() |
|---|
value prop은 넣되 자유롭게 입력할 수 있게 만들고 싶을 때?
→ 값에 undefined 혹은 null을 넣어줌.
Input Null Value 예시

인용 자료 출처
처음 만난 리액트