<select>
<select>
λ΄μ₯ μ»΄ν¬λνΈλ μ΅μ
μ ν¬ν¨νλ select boxλ₯Ό λ λλ§ν©λλ€.
<select>
<option value="someOption">Some option</option>
<option value="otherOption">Other option</option>
</select>
λ νΌλ°μ€
<select>
select boxλ₯Ό νμνλ €λ©΄ <select>
λ΄μ₯ μ»΄ν¬λνΈλ₯Ό λ λλ§ν΄μΌ ν©λλ€.
<select>
<option value="someOption">Some option</option>
<option value="otherOption">Other option</option>
</select>
μλ λ λ§μ μμκ° μμ΅λλ€.
Props
<select>
λ μΌλ°μ μΈ μλ¦¬λ¨ΌνΈ propsλ₯Ό μ§μν©λλ€.
select boxλ₯Ό μ μ΄νλ €λ©΄ value
propμ μ λ¬ν΄ μ£ΌμΈμ.
value
: String νμ (λλmultiple={true}
μμ μ¬μ©νλ String λ°°μ΄)μ΄λ©° μ΄λ€ μ΅μ μ μ νν μ§ μ μ΄ν©λλ€.value
λ<select>
λ΄λΆμ μ€μ²©λ<option>
μvalue
μ μΌμΉν©λλ€.
value
λ₯Ό μ λ¬ν λ, μ λ¬λ value
λ₯Ό μ
λ°μ΄νΈνλ onChange
νΈλ€λ¬λ₯Ό μ λ¬ν΄μΌ ν©λλ€.
λ§μ½ <select>
κ° μ μ΄λμ§ μλλ€λ©΄, defaultValue
propμ μ λ¬ν©λλ€.
defaultValue
: String νμ (λλmultiple={true}
μμ μ¬μ©νλ String λ°°μ΄)μ΄λ©° μ΄κΈ° μ ν μ΅μ μ μ§μ ν©λλ€.
<select>
propsλ μ μ΄λμ§ μλ μνμ μ μ΄λλ μν λͺ¨λμ μ μ©λ©λλ€.
autoComplete
: String νμ μ΄λ©° μ¬μ© κ°λ₯ν μλ μμ± λμ μ€ νλλ₯Ό μ§μ ν©λλ€.autoFocus
: boolean νμ μ΄λ©°true
λΌλ©΄ Reactλ λ§μ΄νΈ μ μ리먼νΈμ μ§μ€ν©λλ€.children
:<select>
λ<option>
,<optgroup>
그리κ³<datalist>
μ νμ μ»΄ν¬λνΈλ₯Ό νμ©ν©λλ€. νμ©λ μ»΄ν¬λνΈ μ€ νλλ₯Ό μ λ¬ν΄ λ λλ§ν μ μμ΅λλ€.<option>
νκ·Έλ₯Ό λ λλ§νλ μ»΄ν¬λνΈλ₯Ό μ λ¬νλ κ²½μ°, κ°<option>
μλvalue
κ° μμ΄μΌ ν©λλ€.disabled
: boolean νμ μ΄λ©°true
λΌλ©΄ select boxμλ μνΈμμ©ν μ μκ³ νλ¦Ώνκ² λ³΄μ λλ€.form
: String νμ μ΄λ©° select boxμ μν<form>
μid
λ₯Ό μ§μ ν©λλ€. μλ΅νλ©΄ κ°μ₯ κ°κΉμ΄ λΆλͺ¨ νΌμid
κ° μ§μ λ©λλ€.multiple
: boolean νμ μ΄λ©°true
λΌλ©΄ λΈλΌμ°μ λ λ€μ€ μ νμ νμ©ν©λλ€.name
: String νμ μ΄λ©° select boxμ νΌμ μ μΆν λ μ μΆλλ μ΄λ¦μ μ§μ ν©λλ€.onChange
:Event
νΈλ€λ¬ ν¨μμ λλ€. μ μ΄λμ΄μΌ νλ select boxμΈ κ²½μ° νμμ λλ€. μ¬μ©μκ° κ°μ λ³κ²½ν λλ§λ€ μ¦μ νΈμΆλ©λλ€. λΈλΌμ°μ μinput
μ΄λ²€νΈμ μ μ¬νκ² λμν©λλ€.onChangeCapture
:onChange
μ κ°μ§λ§ μΊ‘μ² λ¨κ³μμ νΈμΆλ©λλ€.onInput
:Event
νΈλ€λ¬ ν¨μμ λλ€. μ¬μ©μκ° κ°μ λ³κ²½ν λλ§λ€ μ¦μ νΈμΆλ©λλ€. ReactμμλonChange
λ₯Ό μ¬μ©νλ κ²μ΄ κ΄μ΅μ΄μ§λ§,onInput
κ³Ό μ μ¬νκ² λμν©λλ€.onInputCapture
:onInput
μ κ°μ§λ§ μΊ‘μ² λ¨κ³μμ νΈμΆλ©λλ€.onInvalid
:Event
νΈλ€λ¬ ν¨μμ λλ€. νΌ μ μΆ μ μ λ ₯μ΄ μ ν¨νμ§ μμΌλ©΄ νΈμΆλ©λλ€. λ΄μ₯λinvalid
μ΄λ²€νΈμ λ¬λ¦¬ ReactdmlonInvalid
μ΄λ²€νΈλ λ²λΈλ§λ©λλ€.onInvalidCapture
:onInvalid
μ κ°μ§λ§ μΊ‘μ² λ¨κ³μμ νΈμΆλ©λλ€.required
: boolean νμ μ΄λ©°true
λΌλ©΄ νΌ μ μΆ μ κ°μ μ 곡ν΄μΌ ν©λλ€.size
: μ«μ νμ μ΄λ©°multiple={true}
μΈ κ²½μ° μ²μ 보μ¬μ§λ μμ΄ν κ°μλ₯Ό μ§μ ν©λλ€.
μ£Όμ μ¬ν
- HTMLκ³Όλ λ¬λ¦¬,
selected
μμ±μ<option>
μ μ λ¬νλ κ²μ μ§μνμ§ μμ΅λλ€. λμ , μ μ΄λμ§ μλ select boxμΈ κ²½μ°<select defaultValue>
λ₯Ό μ¬μ©νκ³ , μ μ΄λμ΄μΌ νλ select boxμΈ κ²½μ°<select value>
λ₯Ό μ¬μ©ν΄μΌ ν©λλ€. <select>
μvalue
propμ΄ μ λ¬λλ€λ©΄, μ μ΄λλ κ²μΌλ‘ κ°μ£Όν©λλ€.- select boxλ μ μ΄ μνμ λΉμ μ΄ μνλ₯Ό λμμ νν μ μμ΅λλ€. λ μ€ νλμ μνλ§ κ°μ§ μ μμ΅λλ€.
- select boxλ μλͺ μ£ΌκΈ° λμ μ²μ μ€μ ν μ μ΄ μνλ₯Ό λ³κ²½ν μ μμ΅λλ€.
- μ μ΄λλ λͺ¨λ select boxλ μ 곡λλ κ°μ λκΈ°μ μΌλ‘ μ
λ°μ΄νΈνλ
onChange
μ΄λ²€νΈ νΈλ€λ¬κ° νμν©λλ€.
μ¬μ© λ°©λ²
μ΅μ μ΄ λ΄κΈ΄ select box νμ
<select>
λ <option>
μ»΄ν¬λνΈμ 리μ€νΈλ₯Ό ν¬ν¨νλ <select>
λ₯Ό λ λλ§ν©λλ€. κ° <option>
μλ νΌκ³Ό ν¨κ» μ μΆλλ λ°μ΄ν°μΈ value
λ₯Ό μ§μ ν©λλ€.
export default function FruitPicker() { return ( <label> Pick a fruit: <select name="selectedFruit"> <option value="apple">Apple</option> <option value="banana">Banana</option> <option value="orange">Orange</option> </select> </label> ); }
select boxκ° ν¬ν¨λ λΌλ²¨ μ 곡
λΌλ²¨μ΄ ν΄λΉ select boxμ μ°κ²°λμ΄ μμμ λΈλΌμ°μ μ μ리기 μν΄ <label>
νκ·Έ μμ <select>
λ₯Ό λ°°μΉν©λλ€. μ¬μ©μκ° λΌλ²¨μ ν΄λ¦νλ©΄ λΈλΌμ°μ λ μλμΌλ‘ μ ν μμμ μ΄μ μ λ§μΆ₯λλ€. λν, μ κ·Όμ±μ μν΄ νμμ μ
λλ€. μ¬μ©μκ° select boxμ μ΄μ μ λ§μΆλ©΄ μ€ν¬λ¦° 리λκ° λΌλ²¨ μΊ‘μ
μ μ립λλ€.
<select>
λ₯Ό <label>
μμ μ€μ²© μν¬ μ μλ€λ©΄, κ°μ IDλ₯Ό <select id>
μ <label htmlFor>
μ μ λ¬νμ¬ μ°κ²°ν΄μΌ ν©λλ€. ν μ»΄ν¬λνΈμμ μ¬λ¬ μΈμ€ν΄μ€ κ° μΆ©λμ νΌνλ €λ©΄ useId
λ₯Ό μ¬μ©νμ¬ IDλ₯Ό μμ±ν΄ μ£ΌμΈμ.
import { useId } from 'react'; export default function Form() { const vegetableSelectId = useId(); return ( <> <label> Pick a fruit: <select name="selectedFruit"> <option value="apple">Apple</option> <option value="banana">Banana</option> <option value="orange">Orange</option> </select> </label> <hr /> <label htmlFor={vegetableSelectId}> Pick a vegetable: </label> <select id={vegetableSelectId} name="selectedVegetable"> <option value="cucumber">Cucumber</option> <option value="corn">Corn</option> <option value="tomato">Tomato</option> </select> </> ); }
μ΄κΈ° μ ν μ΅μ μ 곡
κΈ°λ³Έμ μΌλ‘ λΈλΌμ°μ λ λͺ©λ‘μμ 첫 λ²μ§Έ <option>
μ μ νν©λλ€. λ€λ₯Έ μ΅μ
μ κΈ°λ³Έκ°μΌλ‘ μ ννλ €λ©΄ <select>
μ리먼νΈμ <option>
μ value
λ₯Ό defaultValue
λ‘ μ λ¬ν΄μΌ ν©λλ€.
export default function FruitPicker() { return ( <label> Pick a fruit: <select name="selectedFruit" defaultValue="orange"> <option value="apple">Apple</option> <option value="banana">Banana</option> <option value="orange">Orange</option> </select> </label> ); }
λ€μ€ μ ν νμ±ν
μ¬μ©μκ° μ¬λ¬ μ΅μ
μ μ νν μ μλλ‘ <select>
μ multiple={true}
λ₯Ό μ λ¬ν΄μΌ ν©λλ€. μ΄κΈ° μ ν μ΅μ
μ μ ννλ €λ©΄ defaultValue
λ₯Ό λ°°μ΄λ‘ μ§μ ν΄μΌ ν©λλ€.
export default function FruitPicker() { return ( <label> Pick some fruits: <select name="selectedFruit" defaultValue={['orange', 'banana']} multiple={true} > <option value="apple">Apple</option> <option value="banana">Banana</option> <option value="orange">Orange</option> </select> </label> ); }
νΌμ μ μΆν λ μ ν μμμμ μ 곡νλ κ° μ½κΈ°
λ΄λΆμ <button type="submit">
μ΄ μλ select box μ£Όλ³μ <form>
μ μΆκ°νλ©΄ <form onSubmit>
μ΄λ²€νΈ νΈλ€λ¬λ₯Ό νΈμΆν΄ κ°μ μ λ¬ν μ μμ΅λλ€. μλ¬΄λ° μ€μ μ΄ λμ΄ μμ§ μλ€λ©΄ λΈλΌμ°μ λ μμ λ°μ΄ν°λ₯Ό νμ¬ URLλ‘ λ³΄λ΄κ³ νμ΄μ§λ₯Ό μλ‘ κ³ μΉ©λλ€. e.preventDefault()
λ₯Ό νΈμΆνμ¬ ν΄λΉ λμμ μ¬μ μν μ μμ΅λλ€. new FormData(e.target)
λ‘ μμ λ°μ΄ν° μ½λ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
export default function EditPost() { function handleSubmit(e) { // λΈλΌμ°μ μμ νμ΄μ§κ° λ€μ λ‘λλμ§ μλλ‘ μ€μ ν μ μμ΅λλ€. e.preventDefault(); // νΌ λ°μ΄ν° μ½μ μ μμ΅λλ€. const form = e.target; const formData = new FormData(form); // formDataλ₯Ό κ°μ Έμ¨ λ³Έλ¬ΈμΌλ‘ μ§μ μ λ¬ν μ μμ΅λλ€. fetch('/some-api', { method: form.method, body: formData }); // λΈλΌμ°μ κ° μννλ κ²μ²λΌ URLμ μμ±ν μ μμ΅λλ€. console.log(new URLSearchParams(formData).toString()); // μΌλ° μ€λΈμ νΈλ‘ μμ ν μ μμ΅λλ€. const formJson = Object.fromEntries(formData.entries()); console.log(formJson); // (!) μ¬κΈ°μλ λ κ° μ΄μμ μ ν κ°μ΄ ν¬ν¨λμ§ μμ΅λλ€. // λλ μ΄λ¦-κ° μμ λ°°μ΄μ μ»μ μ μμ΅λλ€. console.log([...formData.entries()]); } return ( <form method="post" onSubmit={handleSubmit}> <label> Pick your favorite fruit: <select name="selectedFruit" defaultValue="orange"> <option value="apple">Apple</option> <option value="banana">Banana</option> <option value="orange">Orange</option> </select> </label> <label> Pick all your favorite vegetables: <select name="selectedVegetables" multiple={true} defaultValue={['corn', 'tomato']} > <option value="cucumber">Cucumber</option> <option value="corn">Corn</option> <option value="tomato">Tomato</option> </select> </label> <hr /> <button type="reset">Reset</button> <button type="submit">Submit</button> </form> ); }
μν λ³μμ ν¨κ» select box μ μ΄
<select>
μ κ°μ select boxλ μ μ΄λμ§ μμ΅λλ€. <select defaultValue="orange" />
μ κ°μ΄ μ²μμ μ νν κ°μ μ λ¬νλλΌλ JSXλ νμ¬ κ°μ΄ μλ μ΄κΈ° κ°λ§ μ§μ ν©λλ€.
μ μ΄λ select boxλ₯Ό λ λλ§νλ €λ©΄ value
propμ μ λ¬ν΄μΌ ν©λλ€. Reactλ select boxκ° νμ μ λ¬ν value
λ₯Ό κ°λλ‘ κ°μ ν©λλ€. λ³΄ν΅ μν λ³μλ‘ μ μΈνμ¬ μ ν μμλ₯Ό μ μ΄ν©λλ€.
function FruitPicker() {
const [selectedFruit, setSelectedFruit] = useState('orange'); // μν λ³μλ₯Ό μ μΈν©λλ€.
// ...
return (
<select
value={selectedFruit} // ...μ νμ κ°μ΄ μν λ³μμ μΌμΉνλλ‘ κ°μ ν©λλ€....
onChange={e => setSelectedFruit(e.target.value)} // ... λ³κ²½ μ¬νμ λν΄ μν λ³μλ₯Ό μμ ν΄ μ£ΌμΈμ!
>
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="orange">Orange</option>
</select>
);
}
λͺ¨λ μ νμ λν μλ΅μΌλ‘ UI μΌλΆλ₯Ό λ€μ λ λλ§νλ €λ κ²½μ° μ μ©ν©λλ€.
import { useState } from 'react'; export default function FruitPicker() { const [selectedFruit, setSelectedFruit] = useState('orange'); const [selectedVegs, setSelectedVegs] = useState(['corn', 'tomato']); return ( <> <label> Pick a fruit: <select value={selectedFruit} onChange={e => setSelectedFruit(e.target.value)} > <option value="apple">Apple</option> <option value="banana">Banana</option> <option value="orange">Orange</option> </select> </label> <hr /> <label> Pick all your favorite vegetables: <select multiple={true} value={selectedVegs} onChange={e => { const options = [...e.target.selectedOptions]; const values = options.map(option => option.value); setSelectedVegs(values); }} > <option value="cucumber">Cucumber</option> <option value="corn">Corn</option> <option value="tomato">Tomato</option> </select> </label> <hr /> <p>Your favorite fruit: {selectedFruit}</p> <p>Your favorite vegetables: {selectedVegs.join(', ')}</p> </> ); }