roqkf

[React] React์—์„œ์˜ State ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ณธ๋ฌธ

๐Ÿ’ป Development/React

[React] React์—์„œ์˜ State ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

ahyeon7 2022. 11. 30. 02:00

React์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

๐Ÿ”น React์—์„œ์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ DOM ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค. (๋ช‡ ๊ฐ€์ง€์˜ ๋ฌธ๋ฒ• ์ฐจ์ด๊ฐ€ ์žˆ์Œ)

  • React์—์„œ ์ด๋ฒคํŠธ๋Š” ์นด๋ฉœ ์ผ€์ด์Šค ์‚ฌ์šฉ

๐Ÿ‘‰ ์‹๋ณ„์ž ํ‘œ๊ธฐ๋ฒ•

  1. ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•(Camal Case): ์‹๋ณ„์ž ํ‘œ๊ธฐ ์‹œ, ์—ฌ๋Ÿฌ ๋‹จ์–ด๊ฐ€ ์ด์–ด์ง€๋ฉด ์ฒซ ๋‹จ์–ด ์‹œ์ž‘๋งŒ ์†Œ๋ฌธ์ž๋กœ ํ‘œ์‹œํ•˜๊ณ  ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ง€์ •
  2. ํŒŒ์Šค์นผ ํ‘œ๊ธฐ๋ฒ•(Pascal Case): ์‹๋ณ„์ž ํ‘œ๊ธฐ ์‹œ, ์—ฌ๋Ÿฌ ๋‹จ์–ด๊ฐ€ ์ด์–ด์ง€๋ฉด ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋Š” ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ์ง€์ •
  3. ์Šค๋„ค์ดํฌ ํ‘œ๊ธฐ๋ฒ•(Snake Case): ์‹๋ณ„์ž ํ‘œ๊ธฐ ์‹œ, ์—ฌ๋Ÿฌ ๋‹จ์–ด๊ฐ€ ์ด์–ด์ง€๋ฉด ๋‹จ์–ด ์‚ฌ์ด์— ์–ธ๋”๋ฐ” ๋„ฃ๋Š” ํ‘œ๊ธฐ๋ฒ•
  4. ํ—๊ฐ€๋ฆฌ์•ˆ ํ‘œ๊ธฐ๋ฒ•(Hungarian Case): ์‹๋ณ„์ž ํ‘œ์‹œ ์‹œ, ๋‘์–ด์— ์ž๋ฃŒํ˜•์„ ๋ถ™์ž„
<button onclick="handleEvent()">Event</button>

๐ŸŽˆ React์—์„œ์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

<button onClick={handleEvent}>Event</button>


onChange

<input>, <textarea>, <select> ์™€ ๊ฐ™์€ ํผ ์—˜๋ฆฌ๋จผํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ์ œ์–ดํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค. React์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ๊ฐ’์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์˜ state๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•œ๋‹ค. onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด e.target.value ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ฒจ์ ธ ์žˆ๋Š” input ์˜ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

function NameForm() {
  const [name, setName] = useState(""); // state ๋ฌธ์ž์—ด ๋ณ€์ˆ˜ ์„ ์–ธ, ๋ฐ”๋€Œ๋Š” ๊ฐ’์€ setName ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋ฆฌํ„ด

  const handleChange = (e) => {
    setName(e.target.value); // ์ด๋ฒคํŠธ ํƒ€๊ฒŸ์˜ value ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๊ฒ ๋‹ค
  };

  return (
    <div>
      <input type="text" value={name} onChange={handleChange}></input>
      {/* <input> ํƒ€์ž…์˜ ํผ์˜ value๋Š” ํ˜„์žฌ ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š” name(์ดˆ๊ธฐ๊ฐ’์ด ""์ด์—ˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ
            name์—๋Š” ""์ด ์žˆ๋‹ค. onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด handlChange ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ,
            ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” setName์„ ํ†ตํ•ด input์˜ ๊ฐ’์„ ์ƒˆ๋กญ๊ฒŒ ๊ฐฑ์‹ ํ•œ๋‹ค.) */}
      <h1>{name}</h1>
    </div>
  );
}

์ปดํฌ๋„ŒํŠธ return ๋ฌธ ์•ˆ์—์„œ์˜ input ํƒœ๊ทธ์— value ์™€ onChange๋ฅผ ๋„ฃ์—ˆ๋‹ค. onChange๋Š” input ์˜ ํ…์ŠคํŠธ๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด handleChange ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•˜์—ฌ, ์ด๋ฒคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ธด input ๊ฐ’์„ setState ๋ฅผ ํ†ตํ•ด์„œ ์ƒˆ๋กœ์šด state๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

onClick

onClick ์€ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญ ํ–‰๋™์„ ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค. ๋ฒ„ํŠผ์ด๋‚˜ <a> tag๋ฅผ ํ†ตํ•ด์„œ ๋งํฌ ์ด๋™ ๋“ฑ๊ณผ ๊ฐ™์ด ์ฃผ๋กœ ์‚ฌ์šฉ์ž ํ–‰๋™์— ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ˜์‘ํ•ด์•ผ ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค.

function NameForm() {
  const [name, setName] = useState("");

  const handleChange = (e) => {
    setName(e.target.value);
  };

  const handleClick = () => {
    alert(name);
  };
  return (
    <div className="App">
      <h1>Event handler practice</h1>
      <input type="text" value={name} onChange={handleChange}></input>
      {/* <button onClick={handleClick}>Button</button> */}
      <button onClick={() => alert(name)}>Button</button>
      <h3>{name}</h3>
    </div>
  );
}

๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ, alert๋ฅผ ํ†ตํ•ด input ํƒœ๊ทธ์— ์ž…๋ ฅํ•œ ์ด๋ฆ„์ด ์•Œ๋ฆผ์ฐฝ ํŒ์—…์ฐฝ์„ ๋„์šด๋‹ค.

์ฐธ๊ณ : ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 

'๐Ÿ’ป Development > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] Effect Hook  (0) 2022.12.11
[React] React ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ Lifting state up  (0) 2022.12.11
[React] React State & Props  (0) 2022.11.30
[React] React Router  (0) 2022.11.30
[React] SPA  (0) 2022.11.30