
// Register.jsx
const [name, setName] = useState("์ด๋ฆ");
const [birth, setBirth] = useState("");
const [country, setCountry] = useState("");
const [bio, setBio] = useState("");
์ด๋ ๊ฒ ์์ฑํ State๋ฅผ ํ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ ์ํด์ ์ง์ฐ๊ณ
// Register.jsx
const [input, setInput] = useState({
name:"", โก๏ธ name property
birth:"", โก๏ธ birth property
country:"", โก๏ธ country property
bio:"" โก๏ธ bio property
})
useState ์์ ์ง์ ๋ State๋ฅผ ๊ฐ์ฒด ํํ๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ onChange๋ก ์ค์ ํ๋ ๊ฒ๋ค์ ๋ค ๋ณ๊ฒฝํด์ผํ๋๋ฐ
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);
}
setName, setBirth, setCountry, setBio ๋ผ๋ ํจ์๋ ๋์ด์ ์กด์ฌํ์ง์์ผ๋ ์ง์์ฃผ๊ณ
const onChangeName = (e) => {
setInput({
...input,
name : e.target.value
})
}
const onChangeBirth = (e) => {
setInput({
...input,
birth : e.target.value
})
}
const onChangeCountry = (e) => {
setInput({
...input,
country : e.target.value
})
}
const onChangeBio= (e) => {
setInput({
...input,
bio : e.target.value
})
}
...input : spread ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ๊ธฐ์กด์ ์ด input state์ ๋ค์ด์๋ property ๊ฐ๋ค์(name์ ์ ์ธํ property๊ฐ๋ค) ์ ์ง๋๊ฒ ํด์ค๋ค....input๋ฅผ ์์ฑํ์ง ์์ผ๋ฉด name์ ๋ํ ๊ฐ๋ง ๋ฐ๋๊ณ ์์ผ, ๊ตญ์ , ์๊ธฐ์๊ฐ ๊ฐ์ด ์ฌ๋ผ์ง๋ค.๋์ด์ name, birth, countr, bio ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฏ๋ก value ์์ ๊ฐ์ input.์ ๋ถ์ฌ์ ๋ฐ๊ฟ์ค๋ค.
return (
<div>
{/* ์ด๋ฆ */}
<div>
<input value={input.name} โ๏ธ
onChange={onChangeName}
placeholder={"์ด๋ฆ"}/>
</div>
{/* ์๋
์์ผ */}
<div>
<input type="date" value={input.birth} onChange={onChangeBirth}/> โ๏ธ
</div>
{/* ๊ตญ์ */}
<div>
<select value={input.country} onChange={onChangeCountry}>โ๏ธ
<option>-</option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
</div>
{/* ์๊ธฐ์๊ฐ */}
<div>
<textarea value={input.bio} onChange={onChangeBio}/>โ๏ธ
</div>
</div>
)
...input ๋๋ฌธ์ ๋ด๊ฐ ์
๋ ฅํ property ๊ฐ๋ง ๋ณ๊ฒฝ๋๊ณ ๋๋จธ์ง property ๊ฐ์ ๋ณ๊ฒฝ๋์ง์๊ณ ์ ์ง๋๋ค.const onChange = (e) =>{
setInput({
...input,
[e.target.name] : e.target.value,
})
}
์ด๊ฒ ๋จผ ์๋ฆฌ์ผ ํ๊ณ ๊ฐ์๋ฅผ ๊ณ์ ๋ฐ๋ผํ๋๋
return (
<div>
{/* ์ด๋ฆ */}
<div>
<input
name="name" โ๏ธ
value={input.name}
onChange={onChange}
placeholder={"์ด๋ฆ"}/>
</div>
{/* ์๋
์์ผ */}
<div>
<input
name="birth" โ๏ธ
type="date"
value={input.birth}
onChange={onChange}/>
</div>
{/* ๊ตญ์ */}
<div>
<select
name="country" โ๏ธ
value={input.country}
onChange={onChange}>
<option>-</option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
</div>
{/* ์๊ธฐ์๊ฐ */}
<div>
<textarea
name="bio" โ๏ธ
value={input.bio}
onChange={onChange}/>
</div>
</div>
)
input ํ๊ทธ์ name ์์ฑ์ ์ถ๊ฐํ๋ ์ฝ๋๋ฅผ ์ดํดํ๋ค.
[e.target.name] : e.target.value
์ ํํ input ํ๊ทธ์ name ์์ฑ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ๋ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋๊ฑฐ์๋ค.
์ฝ๊ฐ birth : e.target.value ์ด๊ฑฐ๋ ๊ฐ์ ์๋ฏธ์ธ๋ฐ ์ด๊ฒ input ํ๊ทธ์ name ์์ฑ์ผ๋ก ๋ณ๊ฒฝ๋๊ฑฐ์์.
[e.target.name] ์ฌ๊ธฐ ์์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ํ๊ทธ์ name ์์ฑ์ ์ค์ ๋ ๊ฐ์ด ๋ค์ด๊ฐ์๋ค.