공부기록/[강의노트] Udemy React 완벽가이드 1~100
# 60 [udemy React 완벽 가이드 노트] 양방향 바인딩 추가(useState를 통한 input태그 입력값 비워주기)
Jenner
2022. 9. 9. 19:29
사용자 입력값 객체로 만들기
return (
<form onSubmit={submitHandler}>
<div className="new-expense__controls">
<div className="new-expense__control">
<label>Title</label>
<input
type="text"
onChange={titleChangeHandler}
value={enteredTitle}
/>
</div>
<div className="new-expense__control">
<label>Amount</label>
<input
type="number"
min="0.01"
step="0.01"
onChange={amountChangeHandler}
value={enteredAmount}
/>
</div>
<div className="new-expense__control">
<label>Date</label>
<input
type="date"
min="2019-01-01"
max="2022-12-31"
onChange={dateChangeHandler}
value={enteredDate}
/>
</div>
</div>
<div className="new-expense__actions">
<button type="submit">Add Expense</button>
</div>
</form>
);
input 태그의 속성에 onChange속성을 넣어주고
input에 입력값이 바뀔때마다 특정 함수들이 실행되게 한다.
const ExpenseForm = props => {
const [enteredTitle, setEnteredTitle] = useState("");
const [enteredAmount, setEnteredAmount] = useState("");
const [enteredDate, setEnteredDate] = useState("");
const titleChangeHandler = e => {
setEnteredTitle(e.target.value);
};
const amountChangeHandler = e => {
setEnteredAmount(e.target.value);
};
const dateChangeHandler = e => {
setEnteredDate(e.target.value);
};
여기서 form 태그의 자식 요소인 button 태그의 type을 submit으로 바꾸고
form 태그에 onSubmit 속성을 넣어주면
버튼을 누를 때마다 form 태그의 onSubmit에서 가리킨 submitHandler 함수가 실행된다.
const submitHandler = e => {
e.preventDefault();
const expenseData = {
title: enteredTitle,
amount: enteredAmount,
date: new Date(enteredDate),
};
setEnteredAmount("");
setEnteredTitle("");
setEnteredDate("");
console.log(expenseData);
};
useState를 통해 입력된 input 창안의 값 비워주기
submitHandler는
expenseData에 사용자에게서 받아온 enteredTitle을 title 키로 넣어주고
amount키에 enteredAmount값을 넣어주고,
date키에 enteredDate값을 넣어주는 객체를 만들어주게 된다.
또한 이것이 실행되면
각 input태그에 입력된 값이
useState가 실행되면서 빈 값으로 바뀌게 된다.
setEnteredAmount("");
setEnteredTitle("");
setEnteredDate("");
그 이유는 input태그에 value={enteredAmount}등의 속성을 넣어주었기 때문이다.
즉, submitHandler가 실행되면서
setEnteredAmount("");
부분이 실행되어 enteredAmount값이 setEnteredAmount함수가 실행되어 빈 값으로 변경이 되고,
비어버린 input 태그의 value에 enteredAmount가 들어가게 되는 것이다.