input, select, textarea 등 입력 엘리먼트들을 아래와 같이 상태관리 한다고 했을 때 더 효율적으로 관리할 수 있도록 개선
// 간단한 회원가입 폼
// 1. 이름
// 2. 생년월일
// 3. 국적
// 4. 자기소개
import { useState } from "react";
const Register = () => {
const [name, setName] = useState("이름"); // 초기값: 이름
const [birth, setBirth] = useState(""); // 초기값:
const [country, setCountry] = useState("");
const [bio, setBio] = useState("");
const [input, setInput] = useState({
name: "",
birth: "",
country: "",
bio: "",
});
const onChangeName = (e) => {
setName(e.target.value);
};
const onChangeBirth = (e) => {
setBirth(e.target.value);
};
const onChangeCountry = (e) => {
setCountry(e.target.value);
};
const onChangeBio = (e) => {
setBio(e.target.value);
};
return (
<div>
<div>
<input value={name} onChange={onChangeName} placeholder={"이름"} />
</div>
<div>
<input value={birth} onChange={onChangeBirth} type="date" />
</div>
<div>
<select value={country} onChange={onChangeCountry}>
<option></option>
<option value="kr">한국</option>
<option value="us">미국</option>
<option value="uk">영국</option>
</select>
{country}
</div>
<div>
<textarea value={bio} onChange={onChangeBio} />
</div>
</div>
);
};
export default Register;
// 간단한 회원가입 폼
// 1. 이름
// 2. 생년월일
// 3. 국적
// 4. 자기소개
import { useState } from "react";
const Register = () => {
const [input, setInput] = useState({
name: "",
birth: "",
country: "",
bio: "",
});
console.log(input);
const onChange = (e) => {
setInput({
...input /* spread 연산자를 이용해서 기존 input(state)에 들어있던 값들을 변경하지 않고 그대로 유지하도록 하기위해서 추가,
만약 입력하지 않으면 이름 입력시 birth나 country, bio가 없는 객체로 인식됨 */,
[e.target.name]: e.target.value,
});
};
return (
<div>
<div>
<input
name="name"
value={input.name}
onChange={onChange}
placeholder={"이름"}
/>
</div>
<div>
<input
name="birth"
value={input.birth}
onChange={onChange}
type="date"
/>
</div>
<div>
<select name="country" value={input.country} onChange={onChange}>
<option></option>
<option value="kr">한국</option>
<option value="us">미국</option>
<option value="uk">영국</option>
</select>
{input.country}
</div>
<div>
<textarea name="bio" value={input.bio} onChange={onChange} />
</div>
</div>
);
};
export default Register;
인프런 이정환 강사님 강의를 참고해서 정리했습니다. 링크
한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지 강의 | 이정환 Winterlood - 인프런
이정환 Winterlood | , 리액트, 한 강의로 끝장낼 수 있어요.한 입 크기로 잘라먹을 수 있도록 도와드릴게요. 🔥[임베딩 영상][사진]많은 수강생 여러분이 사랑해 주신 덕분에 인사이트 출판사와 함
www.inflearn.com
React - Hooks (1) | 2025.06.01 |
---|---|
React - useRef (0) | 2025.06.01 |
React - State와 Props (0) | 2025.06.01 |
React - State로 상태 관리 (0) | 2025.06.01 |
React - 이벤트 핸들링(Event Handling) (0) | 2025.06.01 |