[๐ŸŽ์ฝ”๋”ฉ์• ํ”Œ ๊ฐ•์˜์š”์•ฝ] React์—์„œ ๋™์  UI ๋งŒ๋“ค๊ธฐ: ๋ชจ๋‹ฌ์ฐฝ ๊ตฌํ˜„

๐ŸŒˆ KJยท2025๋…„ 5์›” 9์ผ

codingapple

๋ชฉ๋ก ๋ณด๊ธฐ
7/23
post-thumbnail

๋™์  UI ๊ฐœ๋ฐœ 3๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค ๐Ÿ”„

React์—์„œ ๋ชจ๋‹ฌ์ฐฝ, ํƒญ, ์„œ๋ธŒ๋ฉ”๋‰ด ๋“ฑ์˜ ๋™์ ์ธ UI๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

1. ๋””์ž์ธ ์ค€๋น„ํ•˜๊ธฐ ๐ŸŽจ

  • HTML/CSS๋กœ UI ๋””์ž์ธ์„ ๋จผ์ € ์™„์„ฑ
  • ๋ณด์ด๊ณ  ์ˆจ๊ฒจ์•ผ ํ•  ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฏธ๋ฆฌ ๋””์ž์ธ

2. ์ƒํƒœ ๊ด€๋ฆฌํ•˜๊ธฐ (state) ๐Ÿ“Š

// ๋ชจ๋‹ฌ์ฐฝ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ state ์ƒ์„ฑ
let [modal, setModal] = useState(false);
  • UI์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•  state ์ƒ์„ฑ
  • boolean, ์ˆซ์ž, ๋ฌธ์ž์—ด ๋“ฑ ์ƒํ™ฉ์— ๋งž๋Š” ์ž๋ฃŒํ˜• ์„ ํƒ
    • ์˜ˆ: true/false, 0/1, '์—ด๋ฆผ'/'๋‹ซํž˜'
  • state ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ์ด๋ฆ„์€ ๊ด€๋ก€์ ์œผ๋กœ set์œผ๋กœ ์‹œ์ž‘

3. ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ๊ตฌํ˜„ํ•˜๊ธฐ ๐Ÿ”€

// JSX์—์„œ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง
{
  modal === true ? <Modal></Modal> : null
}
  • JSX ์•ˆ์—์„œ๋Š” if else ๋ฌธ๋ฒ•์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • state ๊ฐ’์— ๋”ฐ๋ผ UI๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์ˆจ๊น€
  • JSX ๋‚ด์—์„œ๋Š” ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
    • ์กฐ๊ฑด ? ์ฐธ์ผ๋•Œ ์‹คํ–‰ : ๊ฑฐ์ง“์ผ๋•Œ ์‹คํ–‰
  • null์€ ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ

์ด๋ฒคํŠธ์™€ ์ƒํƒœ ์—ฐ๊ฒฐํ•˜๊ธฐ ๐Ÿ”Œ

๊ธ€์ œ๋ชฉ ํด๋ฆญ์œผ๋กœ ๋ชจ๋‹ฌ์ฐฝ ์—ด๊ธฐ

function App() {
  let [modal, setModal] = useState(false);
  
  return (
    <div className="app">
      <div className="list">
        <h4 onClick={() => { setModal(true) }}>๊ธ€์ œ๋ชฉ</h4>
        <p>๋‚ ์งœ</p>
      </div>
      
      {
        modal === true ? <Modal></Modal> : null
      }
    </div>
  );
}

๋™์  UI ๊ฐœ๋ฐœ ์ฒ ํ•™ ๐Ÿ’ก

  • ๋ฆฌ์•กํŠธ ๋ฐฉ์‹: state๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด UI๊ฐ€ ์ž๋™์œผ๋กœ ๋ฐ˜์‘
  • ๋น„์œ : ์ „๋“ฑ(UI)๊ณผ ์Šค์œ„์น˜(state)์˜ ๊ด€๊ณ„
    1. ์ „๋“ฑ(UI) ์„ค์น˜
    2. ์Šค์œ„์น˜(state)์™€ ์—ฐ๊ฒฐ
    3. ์Šค์œ„์น˜ ์กฐ์ž‘์œผ๋กœ ์ „๋“ฑ ์ œ์–ด
  • ๊ธฐ์กด JavaScript์™€ ๋‹ค๋ฅธ ์ : HTML์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์ง€ ์•Š์Œ

์‘์šฉ: ํ† ๊ธ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ ๐Ÿ”„

๋ชจ๋‹ฌ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๋Š” ํ† ๊ธ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„:

function App() {
  let [modal, setModal] = useState(false);
  
  return (
    <div className="app">
      <div className="list">
        <h4 onClick={() => { 
          // ํ˜„์žฌ ์ƒํƒœ์˜ ๋ฐ˜๋Œ€ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ (ํ† ๊ธ€)
          setModal(!modal) 
        }}>
          ๊ธ€์ œ๋ชฉ
        </h4>
        <p>๋‚ ์งœ</p>
      </div>
      
      {
        modal === true ? <Modal></Modal> : null
      }
    </div>
  );
}

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

  1. ๋™์  UI ๊ฐœ๋ฐœ์—๋Š” "๋””์ž์ธ โ†’ ์ƒํƒœ โ†’ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง" 3๋‹จ๊ณ„ ์ ‘๊ทผ๋ฒ• ํ™œ์šฉ
  2. JSX ๋‚ด์—์„œ๋Š” if-else ๋Œ€์‹  ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
  3. UI ์š”์†Œ์˜ ํ‘œ์‹œ/์ˆจ๊น€์€ HTML์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ  state ๋ณ€๊ฒฝ์œผ๋กœ ์ œ์–ด
  4. ํ† ๊ธ€ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ state์˜ ๋ฐ˜๋Œ€ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ตฌํ˜„

๊ฐ•์˜ ๋‚ด์šฉ ๊ฒ€ํ†  ๐Ÿ”

Claude.ai ์—์„œ ์ œ์‹œํ•œ ๊ฐ•์˜์—์„œ ๋ณด์ถฉํ•˜๋ฉด ์ข‹์€ ๋‚ด์šฉ

  1. ๋‹ค์–‘ํ•œ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ๋ฐฉ์‹ ์†Œ๊ฐœ ๋ถ€์กฑ:
    ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์™ธ์—๋„ && ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋” ๊ฐ„๊ฒฐํ•œ ๋ฐฉ์‹๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    // true์ผ ๋•Œ๋งŒ ๋ณด์—ฌ์ฃผ๊ธฐ (false์ผ ๋•Œ๋Š” ์ž๋™์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œ ์•ˆ ํ•จ)
    { modal && <Modal></Modal> }
  2. state ์—…๋ฐ์ดํŠธ ์ตœ์ ํ™” ์„ค๋ช… ๋ˆ„๋ฝ:
    ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ํด๋ฆญ์ด ๋น ๋ฅด๊ฒŒ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

    // ์ผ๋ฐ˜ ๋ฐฉ์‹
    setModal(!modal)
    
    // ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹
    setModal(prevState => !prevState)

0๊ฐœ์˜ ๋Œ“๊ธ€