form
μ°λ¦¬κ° λΈλΌμ°μ λ₯Ό μ¬μ©νλ©΄μ κ°μ₯ λ§μ΄ μ νκ² λλ νλ©΄ μ€ νλκ° λ°λ‘ μ λ ₯μ°½μ΄λ€. κ²μμ΄, μμ΄λ, λΉλ°λ²νΈ λ± μ¬μ©μμ μ λ ₯μ λ°μ μλ²λ‘ μ μ‘νλ μν μ νλκ²μ΄ λ°λ‘ form μμμ΄λ€.
HTMLμμ form μμμ μν΄ μ¬μ©λλ νκ·Έλ μ¬λ¬κ°μ§κ° μλ€.
form
input, textarea
label...etc
μμ λμ΄ν νκ·Έλ€μ΄ μλ§ κ°μ₯ μ΅μν νκ·ΈμΌ κ²μ΄λ€. μ΄ μ€, μμ£Ό μ¬μ©λλ form, input νκ·Έμ λν΄ μ‘°κΈ λ μ΄ν΄λ³΄μ.
form tag
form νκ·Έλ article, main, header μ μ μ¬νκ² μ»΄ν¬λνΈλ΄ μ λ ₯ μμ μ 체λ₯Ό κ°μλ μ¬μ©λλ νκ·Έμ΄λ€. νλ² μμ±λ€μ μμ보μ.
method : μ μ‘ λ°©μμ μ ννλ€. (get, post)
name : formμ μ΄λ¦μ μ€μ νλ€. μλ²λ‘ μ μ‘λ λ°μ΄ν°λ₯Ό μ°Έμ‘°νκΈ° μν΄μ μ€μ νλ€.
action : formμ μ μ‘ν μλ²μͺ½μ script νμΌμ μ§μ νλ€.
autocomplete : λ¨μ΄ κ·Έλλ‘ μλμμ±μ΄λ€. onμΌλ‘ μ€μ μ, κ³Όκ±° μ¬μ©μκ° μ λ ₯ν κ°μ λ² μ΄μ€λ‘ μ¬λ¬ κ°μ 보μ¬μ€λ€.
enctype : λ°μ΄ν°κ° μλ²λ‘ μ μ‘λ λ μΈμ½λ© λλ λ°©μμ λͺ μνλ€.
1. application/x-www-form-urlencoded : default value. λͺ¨λ λ¬Έμμ΄μ μλ²λ‘ μ μ‘μ μ μΈμ½λ© λ¨ 2. multipart/form-data : λͺ¨λ λ¬Έμμ΄μ μΈμ½λ©νμ§ μλλ€. μ£Όλ‘ νμΌ/μ΄λ―Έμ§λ₯Ό μ μ‘ν λ μ¬μ©λλ€. 3. text/plain : 곡백μ "+" λ‘ μΉνλμ§λ§, λλ¨Έμ§ λ¬Έμλ μΈμ½λ© λμ§ μλλ€.
novalidate : λ°μ΄ν°λ₯Ό μλ²λ‘ μ μ‘μ, μ ν¨μ± κ²μ¬λ₯Ό μ€μνμ§ μλλ€λ κ²μ λͺ μνλ€.
μ΄μ²λΌ, form νκ·Έλ μνΈμμ©ν μ λ ₯μ°½, λ²νΌ, νκ·Έλ±μ μ μνλ μν μ μννλ€.
input tag
input νκ·Έλ μ¬μ©μκ° λ°μ΄ν°λ₯Ό μ§μ μ λ ₯ν μ μλλ‘ νλ νκ·Έλ€.
readonly : μ½κΈ°μ μ© νλ μ¬λΆ
placeholder : μ λ ₯μ°½μ μμλ±μ νμν λ μ¬μ©λλ€. (ν΄λ¦μ μ¬λΌμ§)
autofocus : νμ΄μ§ λ λλ§μ, νΉμ λΆλΆμ 컀μκ° νμλλλ‘ νλ€.
autocomplete : μλμμ±
max/min : inputμ μ΅λ/μ΅μκ° μ€μ
maxlength : inputμ μ΅λλ‘ μ λ ₯μ΄ κ°λ₯ν λ¬Έμμ΄ κ°―μλ₯Ό μ§μ νλ€.
required : νμ μ λ ₯ νλλ₯Ό μ§μ νλ€.
type : inputμ μ λ ₯λλ λ°μ΄ν°μ νμ μ μ μνλ€.
μμ μ΄κ±°ν μμ±λ€ μ€, type μμ±μ μ€μ κ°μ λ°λΌ inputμ΄ λ²νΌ, ν μ€νΈ λμ΄ λ μλ μλ€. typeμμ μ€μ ν μ μλ κ°λ€μ μ΄ν΄λ³΄μ.
hidden: μ¬μ©μμκ² λ³΄μ΄μ§ μκ² νλ€.
text : κ°μ₯ μμ£Ό μ¬μ©λλ νμ€ λ¬Έμμ΄μ μ λ ₯νλ ν μ€νΈ μμ.
search : κ²μ μμ(ν¬λ‘¬/μ¬ν리μμλ§ μ¬μ©μ΄ κ°λ₯νλ€).
tel : μ νλ²νΈ μ λ ₯ νλ.
url : url μ£Όμ μ λ ₯ νλ.
email : email μ£Όμ μ λ ₯ νλ.
password : λΉλ°λ²νΈ μ λ ₯ νλ.
number : μ«μ μ‘°μ μ΄ κ°λ₯ν νλ.
range : μ«μ λ²μ μ‘°μ μ΄ κ°λ₯ν νλ. (min, maxλ‘ λ²μλ₯Ό μ‘°μ νλ€.)
checkbox : 2κ°μ΄μ μ νμ΄ κ°λ₯ν 체ν¬λ°μ€.
radio : 1κ°λ§ μ ν κ°λ₯ν λΌλμ€ λ²νΌ.
datetime : UTCλ₯Ό κΈ°μ€μΌλ‘ μ€μ λ λ μ§, μκ° (μ°,μ,μΌ,μ,λΆ,μ΄) νμ
date, month, week, time : μ¬μ©μ μ§μμ κΈ°μ€μΌλ‘ λ μ§,μ,μ£Ό,μκ° νμ
button : λ²νΌμ λ§λ€μ΄ ν΄λ¦μ΄λ²€νΈλ₯Ό λ°μμν¨λ€.
file: νμΌ μ²¨λΆ λ²νΌ μμ±.
submit : μλ² μ μ‘ λ²νΌ μμ±.
reset : μ¬μ©μκ° μ λ ₯ν μ 보 μμ .
μ΄λ κ² μ¬μ©μμ μ λ ₯κ°μ μλ²λ‘ μ μ‘νλκ²μ΄ form μμ νκ·Έλ€μ μν μ΄λ€. νμ΄μ§ νλμ μ κ²λ 1κ° λ§κ²λ μμκ°μ μ λ ₯ νΌμ΄ λ€μ΄κ°μ μκΈ°μ, κ° μ λ ₯ νΌμ λ°μ΄ν° μνλ₯Ό κ΄λ¦¬νλκ²μ΄ μ€μν μμλ‘ κΌ½νκ³€νλ€.
Reactμμλ κ° μ
λ ₯νΌμ μνλ₯Ό useState
λ‘ κ΄λ¦¬νκ² λλ€. νμ§λ§ μνκ°μ΄ λ§μμ§μλ‘ κ° μνλ₯Ό κ΄λ¦¬νκΈ° νλ€μ΄μ§κ³ , κ°λ
μ± λν λ§€μ° λ¨μ΄μ§λ€. λ¬Όλ‘ , νκ°μ useStateλ₯Ό μλμ κ°μ΄ κ°μ²΄νμμΌλ‘ λ§λ€μ΄ κ΄λ¦¬νλ λ°©λ²λ μμ§λ§ μνκ°, μν μ²λ¦¬ ν¨μ, html λ λλ§ λΆλΆμ μμ΄μ κΈ°λ³Έμ μΈ λ³΄μΌλ¬ νλ μ΄νΈκ° μ μ§ μμ κ΄λ¦¬νκΈ° μ½μ§λ μλ€.
import React, { useState } from 'react';
const MultiInputForm = () => {
const [formValues, setFormValues] = useState({
name: '',
email: '',
phone: '',
address: '',
password: '',
confirmPassword: '',
});
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target;
setFormValues((prevValues) => ({
...prevValues,
[name]: value,
}));
};
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
console.log('Form Submitted:', formValues);
};
return (
<form onSubmit={handleSubmit} className="p-4 space-y-4 max-w-md mx-auto">
<div>
<label htmlFor="name" className="block mb-1 font-bold">Name:</label>
<input
type="text"
id="name"
name="name"
value={formValues.name}
onChange={handleChange}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label htmlFor="email" className="block mb-1 font-bold">Email:</label>
<input
type="email"
id="email"
name="email"
value={formValues.email}
onChange={handleChange}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label htmlFor="phone" className="block mb-1 font-bold">Phone:</label>
<input
type="text"
id="phone"
name="phone"
value={formValues.phone}
onChange={handleChange}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label htmlFor="address" className="block mb-1 font-bold">Address:</label>
<input
type="text"
id="address"
name="address"
value={formValues.address}
onChange={handleChange}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label htmlFor="password" className="block mb-1 font-bold">Password:</label>
<input
type="password"
id="password"
name="password"
value={formValues.password}
onChange={handleChange}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label htmlFor="confirmPassword" className="block mb-1 font-bold">Confirm Password:</label>
<input
type="password"
id="confirmPassword"
name="confirmPassword"
value={formValues.confirmPassword}
onChange={handleChange}
className="w-full p-2 border rounded"
/>
</div>
<button type="submit" className="px-4 py-2 bg-blue-500 text-white rounded">
Submit
</button>
</form>
);
};
export default MultiInputForm;
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬μ©λλ λΌμ΄λΈλ¬λ¦¬κ° λ°λ‘ react-hook-formμ΄λ€. ν΄λΉ λΌμ΄λΈλ¬λ¦¬μ κ΄ν΄μλ λ€λ₯Έ κ²μκΈμμ λ€λ€λ³΄λ €κ³ νλ€.
Last updated