[Blog-project] Component

kirin.logยท2021๋…„ 4์›” 24์ผ
0
post-custom-banner

๐Ÿš€ 'Component' ๋ž€?

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•œ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•˜๋ฉฐ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋‹จ์œ„๋ฅผ ๋งํ•œ๋‹ค.
  • ๋ฆฌ์•กํŠธ๋Š” Component๋ฅผ ํ†ตํ•ด ๊ธด HTML์„ ํ•œ ๋‹จ์–ด๋กœ ๊น”๋”ํ•˜๊ฒŒ ์น˜ํ™˜ํ•ด์„œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, UI์˜ ๊ตฌ์„ฑ์„ ๊ฐ Component๋กœ ์ชผ๊ฐ  ๋’ค, ๋ณด์—ฌ์ง€๋Š” HTMLํŽ˜์ด์ง€์— <Component์ด๋ฆ„ />์ด๋ผ๋Š” ํ•œ ์ค„๋กœ ๋„ฃ์–ด์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽ Component ํŠน์ง•
1. Component ์ด๋ฆ„ ์ง€์„ ๋–„๋Š” ์˜์–ด ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘.

  1. return () ์•ˆ์—” ํƒœ๊ทธ๋“ค์ด ํ‰ํ–‰ํ•˜๊ฒŒ ์—ฌ๋Ÿฌ๊ฐœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค. ํ‰ํ–‰ํ•˜๊ฒŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒœ๊ทธ๋ฅผ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด
    ๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค.
    ์•„๋‹ˆ๋ฉด ์˜๋ฏธ์—†๋Š” div๋ฅผ ์“ฐ๊ธฐ ์‹ซ์œผ๋ฉด <> </> ์ด๊ฑธ๋กœ ๋ฌถ์–ด๋„ ๋œ๋‹ค.

๐Ÿฃ ์ƒ์„ธํŽ˜์ด์ง€ ๊ฒธ ๋ชจ๋‹ฌ์ฐฝ UI ์˜ˆ์ œ

// Modal Component

function Modal(){

  return (
    <div className="modal">
       <h2>์ œ๋ชฉ</h2>
       <p>๋‚ ์งœ</p>
       <p>์ƒ์„ธ๋‚ด์šฉ</p>
    </div>
  )
}



// Main Component(App.js)
import Modal from './Component/Modal.js';  // importํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

function App (){
  return (
    <div>
      HTML ์ž”๋œฉ์žˆ๋Š” ๊ณณ
      ...
      <Modal></Modal>  // Component๋ช…์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค
    </div>
  )
}

๐Ÿ’ก ์–ด๋–ค HTML๋“ค์„ Component ๋งŒ๋“œ๋Š”๊ฒŒ ์ข‹์„๊นŒ?

๊ธฐ์ค€์€ ์—†์ง€๋งŒ ๊ด€์Šต์ ์œผ๋กœ ์–ด๋–ค ๋ถ€๋ถ„์„ ์ฃผ๋กœ Componentํ™” ํ•˜๋ƒ๋ฉด

1) ์‚ฌ์ดํŠธ์— ๋ฐ˜๋ณตํ•ด์„œ ์ถœํ˜„ํ•˜๋Š” HTML ๋ฉ์–ด๋ฆฌ๋“ค์€ Component๋กœ ๋งŒ๋“ค๋ฉด ์ข‹๋‹ค.
2) ๋‚ด์šฉ์ด ๋งค์šฐ ์ž์ฃผ ๋ณ€๊ฒฝ๋  ๊ฒƒ ๊ฐ™์€ HTML ๋ถ€๋ถ„์„ ์ž˜๋ผ์„œ Component๋กœ ๋งŒ๋“ค๋ฉด ์ข‹๋‹ค.
3) ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ํŽ˜์ด์ง€์˜ HTML ๋‚ด์šฉ์„ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“œ์‹œ๋Š”๊ฒŒ ์ข‹๋‹ค. (๊ทธ๋ƒฅ ์ข‹์„ ๋ฟ ํ•„์ˆ˜๋Š” ์•„๋‹˜)
4) ๋˜๋Š” ๋‹ค๋ฅธ ํŒ€์›๊ณผ ํ˜‘์—…ํ•  ๋•Œ ์›นํŽ˜์ด์ง€๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์„œ ์ž‘์—…์„ ๋ถ„๋ฐฐํ•˜๊ธฐ๋„ ํ•œ๋‹ค.


๐Ÿš€ toggle ๋งŒ๋“ค๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  display : block ์ด๋Ÿฐ ์Šคํƒ€์ผ์„ ์กฐ์ •ํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ณ  ์•ˆ๋ณด์—ฌ์ฃผ๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ
๋ฆฌ์•กํŠธ์—์„  ๋ชจ๋‹ฌ์ฐฝ์ด ํ˜„์žฌ ๋ณด์ด๋Š”์ง€ ์•ˆ๋ณด์ด๋Š”์ง€ state๋ฅผ ์ €์žฅํ•ด๋‘” ๋’ค์— if๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ state์— ๋”ฐ๋ผ ๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ค€๋‹ค.

๐Ÿš— React์—์„œ์˜ if๋ฌธ โžก ์‚ผํ•ญ์—ฐ์‚ฐ์ž

React์—์„œ if๋ฌธ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (๋ฆฌ์•กํŠธ return๋ฌธ ๋‚ด์—์„œ if๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ if๋ฌธ ๋Œ€์šฉ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ)

1) ๊ธฐ๋ณธ state๊ฐ’์„ true(ํ˜น์€ false)๋กœ ์ง€์ •ํ•˜๊ธฐ
2) ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด true(?)์ด๋ฉด false(ํ˜น์€ true), false(:)์ด๋ฉด null์„ ์กฐ๊ฑด์œผ๋กœ ๊ฑธ๊ธฐ

function App (){

  let [modal, setModal] = useState(false);  // ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ false๋ฅผ ์ค€๋‹ค

  return (
    <div>
      HTML ์ž”๋œฉ์žˆ๋Š” ๊ณณ
     
      { 
         modal === true   // modal์˜ ๊ธฐ๋ณธstate๊ฐ’์€ false์ด๋ฏ€๋กœ, ์ด ์ƒํƒœ๋Š” modal์ด ์•ˆ๋ณด์ž„
         ? <Modal />      // modal์ด true๊ฐ€ ๋˜๋ฉด <Modal />์ด ๋ณด์ž„
         : null           // modal์ด false๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋ณด์ž„
      }
    </div>
    <button onClick={ ()=>{ setModal(!modal) } }> ์—ด๊ธฐ </button>
    // button ๋ˆ„๋ฅด๋ฉด state๊ฐ’(=false)์ด true๋กœ ๋ฐ”๋€œ(false์˜ ๋ฐ˜๋Œ€๋‹ˆ๊น)
    // ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด toggle๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋จ. ๋ˆ„๋ฅด๋ฉด true, ๋˜๋ˆ„๋ฅด๋ฉด false
  )
}



// Modal Component
function Modal(){

  return (
    <div className="modal">
       <h2>์ œ๋ชฉ</h2>
       <p>๋‚ ์งœ</p>
       <p>์ƒ์„ธ๋‚ด์šฉ</p>
    </div>
  )
}

๐Ÿš— React์—์„œ ํด๋ฆญ์‹œ ๋ณด์ด๋Š” UI ๋งŒ๋“œ๋Š” ๋ฒ•

1) ์ผ๋‹จ UI๊ฐ€ ๋ณด์ด๋Š”/๋ณด์ด์ง€์•Š๋Š” ์ƒํƒœ์ •๋ณด๋ฅผ state๋กœ ๋งŒ๋“ค์–ด๋‘  (๋ณดํ†ต true/false ์ž๋ฃŒํ˜•์œผ๋กœ)
2) state๊ฐ€ true์ผ ๋•Œ๋งŒ UI๋ฅผ ๋ณด์—ฌ์ค€๋‹ค๊ณ  if๋ฌธ์„ ์‚ฌ์šฉํ•จ
3) <์—ด๊ธฐ๋ฒ„ํŠผ>์„ ๋ˆ„๋ฅด๋ฉด state๊ฐ€ true๋กœ ๋ฐ”๋€Œ๋„๋ก ๋ฒ„ํŠผ์— ๊ธฐ๋Šฅ๊ฐœ๋ฐœํ•จ

profile
boma91@gmail.com
post-custom-banner

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