<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을 μ „λ‹¬ν•©λ‹ˆλ‹€.

<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 μ΄λ²€νŠΈμ™€ 달리 Reactdml onInvalid μ΄λ²€νŠΈλŠ” λ²„λΈ”λ§λ©λ‹ˆλ‹€.
  • 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>
  );
}

Pitfall

HTMLκ³ΌλŠ” 달리 κ°œλ³„ <option>에 selected 속성을 μ „λ‹¬ν•˜λŠ” 것은 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


닀쀑 선택 ν™œμ„±ν™”

μ‚¬μš©μžκ°€ μ—¬λŸ¬ μ˜΅μ…˜μ„ 선택할 수 μžˆλ„λ‘ <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>
  );
}

Note

<select>에 name을 μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.(μ˜ˆμ‹œ : <select name="selectedFruit" />) μ§€μ •ν•œ name은 폼 λ°μ΄ν„°μ—μ„œ ν‚€λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. (μ˜ˆμ‹œ : { selectedFruit: "orange" })

<select multiple={true}>λ₯Ό μ‚¬μš©ν•˜λ©΄ FormDataμ—μ„œ 각 μ„ νƒν•œ 값을 λ³„λ„μ˜ 이름-κ°’ 쌍으둜 ν¬ν•¨ν•©λ‹ˆλ‹€. μœ„μ˜ μ˜ˆμ‹œμ—μ„œ μ½˜μ†” 둜그λ₯Ό 확인해 μ£Όμ„Έμš”.

Pitfall

기본적으둜 <form> λ‚΄λΆ€μ˜ λͺ¨λ“  <button>은 select box의 값을 μ œμΆœν•©λ‹ˆλ‹€. μ˜λ„μΉ˜ μ•Šμ€ λ™μž‘μœΌλ‘œ 인해 λ‹Ήν™©ν•  수 μžˆμŠ΅λ‹ˆλ‹€! React μ»΄ν¬λ„ŒνŠΈμ˜ μ‚¬μš©μž μ •μ˜ Button이 μžˆλ‹€λ©΄ <button> λŒ€μ‹  <button type="button">을 λ°˜ν™˜ν•˜λŠ” 것을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ λͺ…μ‹œμ μœΌλ‘œ 폼을 μ œμΆœν•΄μ•Ό ν•˜λŠ” 곳에 <button type="submit">을 μ‚¬μš©ν•΄ μ£Όμ„Έμš”.


μƒνƒœ λ³€μˆ˜μ™€ ν•¨κ»˜ 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>
    </>
  );
}

Pitfall

onChange 없이 valueλ₯Ό μ „λ‹¬ν•˜λ©΄ μ˜΅μ…˜μ„ 선택할 수 μ—†μŠ΅λ‹ˆλ‹€. valueλ₯Ό μ „λ‹¬ν•˜μ—¬ select boxλ₯Ό μ œμ–΄ν•˜λ©΄ μ „λ‹¬ν•œ 값이 항상 μžˆλ„λ‘ κ°•μ œν•©λ‹ˆλ‹€. λ”°λΌμ„œ valueλ₯Ό μƒνƒœ λ³€μˆ˜λ‘œ μ „λ‹¬ν–ˆμ§€λ§Œ onChange 이벀트 ν•Έλ“€λŸ¬μ—μ„œ μƒνƒœ λ³€μˆ˜λ₯Ό λ™κΈ°μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜μ§€ μ•ŠμœΌλ©΄ ReactλŠ” ν‚€λ₯Ό λˆ„λ₯Ό λ•Œλ§ˆλ‹€ select boxλ₯Ό μ§€μ •ν•œ value둜 λ˜λŒλ¦½λ‹ˆλ‹€.

HTMLκ³ΌλŠ” 달리 κ°œλ³„ <option>에 selected 속성을 μ „λ‹¬ν•˜λŠ” 것은 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.