[React] ๐Ÿงพ React์—์„œ ์—ฌ๋Ÿฌ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ•

๋ฆฌ์•กํŠธ๋ฅผ ์“ฐ๋‹ค ๋ณด๋ฉด ์ด๋ฆ„, ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ ์ž…๋ ฅํ•„๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค useState๋ฅผ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค๋ฉด ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ฒ ์ฃ ?

์˜ค๋Š˜์€ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ์ž…๋ ฅ๊ฐ’์„ ํ•˜๋‚˜์˜ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ด…์‹œ๋‹ค!


1. ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ์ƒํƒœ๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์š”

์•„๋ž˜์™€ ๊ฐ™์ด form ์ƒํƒœ๋ฅผ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋งŒ๋“ค๊ณ , ๊ฐ ์ž…๋ ฅ ํ•„๋“œ์˜ ์ด๋ฆ„์„ ํ‚ค(key)๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const [form, setForm] = useState({
  name: '',
  email: ''
});

์ด์ œ ์ž…๋ ฅ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ํ‚ค๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋ผ์š”!


2. โœ๏ธ onChange ํ•จ์ˆ˜ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ

๋ชจ๋“  input์— ๊ฐ™์€ handleChange ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. e.target.name์„ ํ™œ์šฉํ•ด ์–ด๋–ค ํ•„๋“œ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์ž๋™์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ฑฐ๋“ ์š”.

function handleChange(e) {
  const { name, value } = e.target;
  setForm(prev => ({
    ...prev,
    [name]: value
  }));
}

์ด์ œ name="email" ๋˜๋Š” name="name" ์†์„ฑ๋งŒ ์ž˜ ๋ถ™์ด๋ฉด ์™„์„ฑ!


3. ๐Ÿงช ์ „์ฒด ์˜ˆ์ œ ์ฝ”๋“œ

function SignupForm() {
  const [form, setForm] = useState({
    name: '',
    email: ''
  });

  function handleChange(e) {
    const { name, value } = e.target;
    setForm(prev => ({
      ...prev,
      [name]: value
    }));
  }

  return (
    <div>
      <input
        name="name"
        value={form.name}
        onChange={handleChange}
        placeholder="์ด๋ฆ„"
      />
      <input
        name="email"
        value={form.email}
        onChange={handleChange}
        placeholder="์ด๋ฉ”์ผ"
      />
      <p>
        ์ด๋ฆ„: {form.name} <br />
        ์ด๋ฉ”์ผ: {form.email}
      </p>
    </div>
  );
}

๐Ÿ–ผ๏ธ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ํ๋ฆ„๋„

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์ž…๋ ฅ๊ฐ’์ด ๊ฐ์ฒด ์ƒํƒœ์— ์ €์žฅ๋˜๊ณ , ํ•ด๋‹น ๊ฐ’์„ UI์— ๋ฐ˜์˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:


๐Ÿ“Œ ํ•ต์‹ฌ ์š”์•ฝ

  • ์—ฌ๋Ÿฌ ์ž…๋ ฅ๊ฐ’์€ ๊ฐ์ฒด๋กœ ๋ฌถ์–ด์„œ ์ƒํƒœ ๊ด€๋ฆฌํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์š”
  • name ์†์„ฑ๊ณผ e.target.name์„ ํ™œ์šฉํ•˜๋ฉด onChange ํ•จ์ˆ˜ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์š”
  • ...prev๋กœ ์ด์ „ ๊ฐ’์„ ๋ณด์กดํ•œ ํ›„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ

์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•ญ๋ชฉ์€ *(์œผ)๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค