react ๊ธฐ๋ณธ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค์ด๋ todo app์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฐ์ฐ๊ณ ํ๋ฒ ๋ง์ด๊ทธ๋ ์ด์ ํด๋ณด์๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ์ปดํ์ผ์์ ์๋ฌ ๋ด์ฃผ๋ ๊ฒ๋ค์ ๋๋ฆ ์ด๊ฒ์ ๊ฒ ํด๋ณด๋ฉด์ ๋นจ๊ฐ ์ค ๋ค ์์ด๋ค๊ณ ์ข์ํ๋๋ฐ ์ค์ ๋ก ์ผ๋ณด๋ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ....???
์ด๊ฑธ ๋๋ฒ๊น ํ๋๋ฐ๋ ์๊ฐ์ ์ผ๋ง๋ ๋ค์๋์ง... ^^
๋ค์์ ์ค์ํ์ง ์๊ธฐ์ํด ๊ธฐ๋กํด๋ณธ๋ค!
๐ ๋ฌธ์
form ํ๊ทธ์ submit ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํด๋์ด์ input์ ์์ฑํ๊ณ ์ถ๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ด์ฉ์ด ์๋ฒ๋ก ๊ฐ๊ณ ํ๋ฉด ๋ฆฌ์คํธ์ ์ถ๊ฐ๊ฐ ๋์ด์ผํจ.
But, ์๊พธ ํ๋ฉด์ด ์๋ก๊ณ ์นจ๋จ. ์๋ฌด๋ฐ ์ฝ์๋ ์๋ณด์ด๊ณ ๊ทธ๋ฅ ์์ ์๋ก์ด ํ๋ฉด
์ด๊ฒ e.preventDefault()๊ฐ ์๋์ ์ํด์ ๊ทธ๋ฐ๊ฑด์ง๋ ํ์ฐธ ์ดํ์ ๊นจ๋ฌ์๋ค... ๐
form ํ๊ทธ ์ฌ์ฉํ๋๋ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ๋ฉด์ด ์์ ์๋ก ๊ณ ์นจ๋๋ค???
e.preventDefault()๊ฐ ์ ๋๋ก ์๋์ด ์๋๊ณ ์๋ค๋ ๊ฑธ ์์ฌํ์..
e.preventDefault()
์๋ ๋ธ๋ผ์ฐ์ ์์๋ ๋ํ์ ์ผ๋ก form์ submitํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ๊ธฐ๋ณธ๋์์ด ์๋๋ฐ, ์ด๋ฐ ์ด๋ฒคํธ๋ ์ ์ ์๊ฒ ์๋ก๊ณ ์นจ๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค. ์ด๋ฐ ๊ธฐ๋ณธ ๋์์ ๋ง์ผ๋ ค๋ฉด event ๊ฐ์ฒด์ preventDefault() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ฌ์ฉ์๊ฐ ๊ณ์ ๊ฐ์ ํ์ด์ง์ ๋จธ๋ฌด๋ฅด๊ฒ ํ๋ค.
๐ ์ด์ ์ฝ๋
export const Todo = () => {
const [todoInput, setTodoInput] = useState("");
const submitTodo = (e: React.FormEvent<HTMLInputElement>) => {
e.preventDefault();
createTodo({ todoBody: todoInput });
};
return (
<form onSubmit={(e) => submitTodo}>
<input
onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setTodoInput(e.target.value)
}
value={todoInput}
></input>
<button disabled={todoInput.length === 0}>
์ถ๊ฐ
</button>
</form>
)
}
์ถ์ํ ํ์๋ฉด ์ด๋ฐ ์ฝ๋์ด๋ค.
์ด์ํ ๋ถ๋ถ์ด ๋ ๊ฐ์ง ์๋ค.
1. submitTodo ํจ์์์ ๋ฐ๋ ๋งค๊ฐ๋ณ์ ์ด๋ฒคํธ ๊ฐ์ฒด์ ํ์
FormEvent ํ์ ์ผ๋ก ์ ๋ฐ๋ ค์์ง๋ง, ๊ทธ ์ด๋ฒคํธ๊ฐ ์ ์ฉ๋์ผ๋๋ ํ์ ์ HTMLInputElement ๋ผ๊ณ ์ ์ด๋
FormEvent ํ์ ์ด๋ฏ๋ก HTMLFormElement ๊ฐ ๋์ผํจ
2. <form> ํ๊ทธ์ onSubmit ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ฑ๋กํ๋ ๋ถ๋ถ
์ด๋ฒคํธ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ดํํจ์๋ฅผ ์ฌ์ฉํด์ ์ ๋ฌํด๋๊ณ ์ค์ ๋งค๊ฐ๋ณ์๋ ์ ์ด๋์ง ์์
๐ ์ดํ ์ฝ๋
export const Todo = () => {
const [todoInput, setTodoInput] = useState("");
const submitTodo = (e: React.FormEvent<HTMLFormElement>) => { //here
e.preventDefault();
createTodo({ todoBody: todoInput });
};
return (
<form onSubmit={(e) => submitTodo(e)}> //here
//<form onSubmit={submitTodo}> //works well too
<input
onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setTodoInput(e.target.value)
}
value={todoInput}
></input>
<button disabled={todoInput.length === 0}>
์ถ๊ฐ
</button>
</form>
)
}
๋ฆฌ์กํธ์์ ์ด๋ฒคํธ ์ฒ๋ฆฌํ ๋๋ ํจ์๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ๋ฉด ๋๋๋ฐ,
์ด๋ฒคํธ๊ฐ์ฒด ๋งค๊ฐ๋ณ์๊ฐ ์์๋ ํ์ดํ ํจ์๋ก ์ ์ด์ค๋ ๋๊ณ ๊ทธ๋ฅ ๋ฐ๋ก ํจ์๋ฅผ ์ ๋ฌํด์ค๋ ๋๋ค.