[소플의 처음 만난 리액트] 11장 실습문제
이 포스트는 각각의 컴포넌트를 이용해 사용자의 입력을 받는 다양한 방법을 다루고 있으며, 이를 통해 실시간으로 값 변경, 데이터 렌더링, 다중 입력 다루기 등을 소개합니다.
Jan 02, 2024
NameForm.jsx
import React, { useState } from "react";
function NameForm(props) {
const [value, setValue] = useState('');
const handleChange = (event) => {
// 사용자가 입력한 값을 함수로 변경할 수도 있음
// input에 들어가는 값이 변경될 때마다 실행 ex) 네이버 검색창의 추천 검색어 제공 처럼 활용 가능
setValue(event.target.value.toUpperCase());
}
const handleSubmit = (event) => {
alert('입력한 이름: ' + value);
// 서버가 없기 때문에 기본적으로 설정된 동작 막음
event.preventDefault();
}
return (
<form onSubmit={handleSubmit}>
<label>
이름:
<input type="text" value={value} onChange={handleChange} />
{/* <textarea type="text" value={value} onChange={handleChange} /> */}
</label>
<button type="submit">제출</button>
</form>
)
}
export default NameForm;
핵심 키워드
- event를 통해 사용자가 입력한 값을 실시간으로 함수를 통해 변경할 수 있다.
- event.preventDefault() 함수는 기본적으로 설정된 동작을 막는 함수다.
FruitSelect.jsx
import React, {useState} from "react";
const data = [
{
id: 1,
type: 'apple',
name: '사과',
},
{
id: 2,
type: 'banana',
name: '바나나',
},
{
id: 3,
type: 'grape',
name: '포도',
},
{
id: 4,
type: 'orange',
name: '오렌지',
},
]
function FruitSelect(props){
const [value, setValue] = useState('grape');
const handleChange = (event) => {
setValue(event.target.value);
}
const handleSubmit =(event) => {
alert('선택한 과일: ' + value);
event.preventDefault();
}
return(
<form onSubmit={handleSubmit}>
<label>
과일을 선택하세요:
<select value={value} onChange={handleChange}>
{/* 미리 태그를 작성해 두는게 아니라 데이터를 서버에서 받아올 경우는 forEach 함수나 map 함수를 사용한다. */}
{data.map((e) => {
return <option key={e.id} value={e.type}>{e.name}</option>;
})}
</select>
</label>
<button type="submit">제출</button>
</form>
)
}
export default FruitSelect;
핵심 키워드
- 백엔드에서 데이터를 받아오는 것을 염두해서 코드를 작성해야 한다. 컴포넌트를 렌더링하는 경우 미리 태그를 작성해두는 것이 아닌 forEach()함수나 map()함수를 통해 목록을 렌더링한다.
Reservation.jsx
import React, { useState } from "react";
function Reservation(props) {
const [haveBreakfast, setHaveBreakfast] = useState(true);
const [numberOfGuest, setNumberOfGuest] = useState(2);
const handleSubmit = (event) => {
alert(`아침식사 여부: ${haveBreakfast}, 방문객 수: ${numberOfGuest}`);
event.preventDefault();
}
return (
<form onSubmit={handleSubmit}>
<label>
아침식사 여부:
<input
type="checkbox"
checked={haveBreakfast}
onChange={(event) => {
setHaveBreakfast(event.target.checked);
}} />
</label>
<br />
<label>
방문객 수:
<input
type="number"
value={numberOfGuest}
onChange={(event) => {
setNumberOfGuest(event.target.value);
}} />
</label>
<button type="submit">제출</button>
</form>
)
}
export default Reservation;
핵심 키워드
- 하나의 컴포넌트에서 여러 개의 입력을 다루기 위해서는 여러 개의 state를 선언해서 각각의 입력에 대해 사용하면 된다.
SignUp.jsx
import React, { useState } from "react";
// 사용자 정보 입력받기
function SignUp(props){
const [name, setName] = useState("");
const [gender, setGender] = useState("남자");
const handleChangeName = (event) => {
setName(event.target.value);
};
const handleChangeGender = (event) => {
setGender(event.target.value);
};
const handleSubmit = (event) => {
alert(`이름: ${name}, 성별: ${gender}`);
event.preventDefault();
};
return (
<form onSubmit={handleSubmit}>
<label>
이름:
<input type="text" value={name} onChange={handleChangeName} />
</label>
<br />
<label>
성별:
<select value={gender} onChange={handleChangeGender}>
<option value="남자">남자</option>
<option value="여자">여자</option>
</select>
</label>
<button type="submit">제출</button>
</form>
);
}
export default SignUp;
핵심 키워드
- 사용자 입력을 받을 경우에는 input 뿐만 아니라 다양한 type을 컴포넌트로 만들 수 있다.
결론!
해당 문제들을 풀면서 사용자의 입력을 받는 다양한 방법들을 익힐 수 있었다.
Share article