기본적인 회원가입 형태의 예제
변수마다 개별적으로 state를 생성하고, onChange 함수를 작성했다.
input
태그의 값을 전달받기 위해서는 매개변수를 name
이라고 할 때, name.target.value
의 형태로 받아올 수 있다.
import { useState } from "react";
const Register = () => {
const [name, setName] = useState("");
const [birth, setBirth] = useState("");
const [country, setCountry] = useState("");
const [phoneNumber, setPhoneNumber] = useState("");
const onChangeName = (name) => {
setName(name.target.value)
}
const onChangeBirth = (birth) => {
setBirth(birth.target.value)
}
const onChangeCountry = (country) => {
setCountry(country.target.value)
}
const onChangePhoneNumber = (phoneNumber) => {
setPhoneNumber(phoneNumber.target.value)
}
return(
<div>
<input
value={name}
placeholder="이름"
onChange={onChangeName}/>
<p>{name}</p>
<input
value={birth}
type="date"
onChange={onChangeBirth}
/>
<p>{birth}</p>
<select
value={country}
onChange={onChangeCountry}
>
<option></option>
<option>대한민국</option>
<option>일본</option>
<option>중국</option>
</select>
<p>{country}</p>
<input
value={phoneNumber}
placeholder="'-'을 입력하세요"
onChange={onChangePhoneNumber}
/>
<p>{phoneNumber}</p>
</div>
)
}
export default Register;
이전 코드는 비슷한 형태를 갖는 코드들이 개별적으로 존재했다. 비슷한 형태의 코드들을 합쳐보겠다.
input
이라는 객체 배열 형태의 state 변수를 선언한다. onChange 함수는 spread 연산자 ...
을 사용하여 ipnut 배열을 나열하고, 밑에 input
태그에서 사용한 name
속성을 통해 해당하는 객체에 데이터를 저장할 수 있다.
import { useState } from "react";
const Register = () => {
const [input, setInput] = useState({
name:"",
birth:"",
country:"",
phoneNumber:""
})
const onChangeInput = (input) => {
setInput({
...input,
[input.target.name] : input.target.value
})
}
return(
<div>
<input
name="name"
value={input.name}
placeholder="이름"
onChange={onChangeInput}/>
<p>{input.name}</p>
<input
name="birth"
value={input.birth}
type="date"
onChange={onChangeInput}
/>
<p>{input.birth}</p>
<select
name="country"
value={input.country}
onChange={onChangeInput}
>
<option></option>
<option>대한민국</option>
<option>일본</option>
<option>중국</option>
</select>
<p>{input.country}</p>
<input
name="phoneNumber"
value={input.phoneNumber}
placeholder="'-'을 입력하세요"
onChange={onChangeInput}
/>
<p>{input.phoneNumber}</p>
</div>
)
}
export default Register;
import { useState } from 'react'
import Register from "./components/Register"
function App() {
return (
<div>
<Register />
</div>
)
}
export default App;