[Blog-project] props

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

๐Ÿš€ 'props' ๋ž€?

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ state๋ฅผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•  ๋•Œ, ๋ถ€๋ชจ์—๊ฒŒ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ.
  • Data Flow๋Š” ๋‹จ๋ฐฉํ–ฅ ํ˜•์‹์œผ๋กœ ๋ถ€๋ชจ์—์„œ๋ถ€ํ„ฐ ์ž์‹์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๊พธ๋กœ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ props์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ์˜ค์ง ์•ˆ์—์žˆ๋Š” ๊ฐ’์„ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ• ์ˆ˜๋งŒ ์žˆ๋‹ค.
  • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— props๋ผ๊ณ  ์“ฐ๊ณ , ๋ฐ›์•„์™€์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” {props.state์ด๋ฆ„}์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๐ŸŽ props ์‚ฌ์šฉ๋ฐฉ๋ฒ•
1) <์ž์‹์ปดํฌ๋„ŒํŠธ ์ „์†กํ• ์ด๋ฆ„={state๋ช…}> ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•œ ํ›„
2) ์ž์‹์ปดํฌ๋„ŒํŠธ ์„ ์–ธํ•˜๋Š” function ์•ˆ์— ํŒŒ๋ผ๋ฏธํ„ฐ(props)๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ.
3) ์ž์‹์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜ ๋‚ด์—์„œ state๊ฐ’์„ ๋ฐ›์™€์•„์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์•ˆ์— {props.state์ด๋ฆ„}์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


๐Ÿฃ props ์ „๋‹ฌ ์˜ˆ์ œ(1)


// Main Component(App.js) = ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ
import Modal from './Component/Modal.js';  // importํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

function App (){
  let [title, setTitle] = useState(['์Šค๋ฆด๋Ÿฌ ์˜ํ™” ์ถ”์ฒœ', '๊ฐ•๋‚จ ์šฐ๋™๋ง›์ง‘', '๋ฆฌ์•กํŠธ๋…ํ•™']);
  return (
    <div>
      ...
      //  <Modal ์ „์†กํ• ์ด๋ฆ„={state๋ช…}> 
      <Modal title={title}></Modal>  // state๊ฐ’์„ ์ „๋‹ฌ (๋ณ€์ˆ˜๋ช…={state์ด๋ฆ„})
    </div>
  )
}



// Modal Component(Modal.js) = ์ž์‹์ปดํฌ๋„ŒํŠธ
function Modal(props){
  return (
    <div className="modal">
                // props.์ „์†กํ• ์ด๋ฆ„
      <h2>์ œ๋ชฉ { props.title[0] }</h2>  // ์Šค๋ฆด๋Ÿฌ ์˜ํ™” ์ถ”์ฒœ
      <p>๋‚ ์งœ</p>
      <p>์ƒ์„ธ๋‚ด์šฉ</p>
    </div>
      <div className="modal">
                // props.์ „์†กํ• ์ด๋ฆ„
      <h2>์ œ๋ชฉ { props.title[1] }</h2>  // ๊ฐ•๋‚จ ์šฐ๋™๋ง›์ง‘
      <p>๋‚ ์งœ</p>
      <p>์ƒ์„ธ๋‚ด์šฉ</p>
    </div>
                // props.์ „์†กํ• ์ด๋ฆ„
      <h2>์ œ๋ชฉ { props.title[2] }</h2>  // ๋ฆฌ์•กํŠธ ๋…ํ•™
      <p>๋‚ ์งœ</p>
      <p>์ƒ์„ธ๋‚ด์šฉ</p>
    </div>
  )
}

๐ŸŽ props ํŠน์ง•

1) props๋Š” <Modal ์ด๋Ÿฐ๊ฑฐ={์ด๋Ÿฐ๊ฑฐ} ์ €๋Ÿฐ๊ฑฐ={์ €๋Ÿฐ๊ฑฐ}> ์ด๋ ‡๊ฒŒ 10๊ฐœ 100๊ฐœ 1000๊ฐœ ๋ฌดํ•œํžˆ ์ „์†ก์ด ๊ฐ€๋Šฅ.

2) props๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์—” ์ „์†กํ•œ ๋ชจ๋“  props ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ๋‹ค. props.title ์ด๋Ÿฐ ์‹์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ๋งŒ ๊บผ๋‚ด์“ฐ๋ฉด ๋œ๋‹ค.

3) props ์ „์†กํ•  ๋• ๊ผญ {} ์ค‘๊ด„ํ˜ธ๋กœ ์ „์†กํ•ด์•ผํ•˜๋Š”๊ฑด ์•„๋‹ˆ๋‹ค.

<Modal ๊ธ€์ œ๋ชฉ={๋ณ€์ˆ˜๋ช…}> ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๋ช…์„ ๋„ฃ๊ณ ์‹ถ์œผ๋ฉด ์ค‘๊ด„ํ˜ธ๋ฅผ ์“ฐ๊ณ ,
<Modal ๊ธ€์ œ๋ชฉ=โ€๊ฐ•๋‚จ์šฐ๋™๋ง›์ง‘โ€> ์ด๋ ‡๊ฒŒ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋ฅผ ์ „์†กํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋”ฐ์˜ดํ‘œ ์จ๋„ ๋œ๋‹ค.


๐Ÿฃ props ์ „๋‹ฌ ์˜ˆ์ œ(2)


// Main Component(App.js) = ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ
import Modal from './Component/Modal.js';  // importํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

function App (){
  let [title, setTitle] = useState(['์Šค๋ฆด๋Ÿฌ ์˜ํ™” ์ถ”์ฒœ', '๊ฐ•๋‚จ ์šฐ๋™๋ง›์ง‘', '๋ฆฌ์•กํŠธ๋…ํ•™']);
  let [๋ˆ„๋ฅธ์ œ๋ชฉ, ๋ˆ„๋ฅธ์ œ๋ชฉ๋ณ€๊ฒฝ] = useState(0);

  return (
    <div>
      // ์ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ˆ„๋ฅธ์ œ๋ชฉ state๊ฐ€ 0์ด ๋จ
      <button onClick={()=>{ ๋ˆ„๋ฅธ์ œ๋ชฉ๋ณ€๊ฒฝ(0) }}>๋ฒ„ํŠผ1</button>
      // ์ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ˆ„๋ฅธ์ œ๋ชฉ state๊ฐ€ 1์ด ๋จ    
      <button onClick={()=>{ ๋ˆ„๋ฅธ์ œ๋ชฉ๋ณ€๊ฒฝ(1) }}>๋ฒ„ํŠผ2</button>
      // ์ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ˆ„๋ฅธ์ œ๋ชฉ state๊ฐ€ 2๊ฐ€ ๋จ
      <button onClick={()=>{ ๋ˆ„๋ฅธ์ œ๋ชฉ๋ณ€๊ฒฝ(2) }}>๋ฒ„ํŠผ3</button>

      <Modal title={title} ๋ˆ„๋ฅธ์ œ๋ชฉ={๋ˆ„๋ฅธ์ œ๋ชฉ}></Modal>  // state๊ฐ’์„ ์ „๋‹ฌ (๋ณ€์ˆ˜๋ช…={state์ด๋ฆ„})
    </div>
  )
}



// Modal Component(Modal.js) = ์ž์‹์ปดํฌ๋„ŒํŠธ
function Modal(props){
  return (
    <div className="modal">
                            // [props.๋ˆ„๋ฅธ์ œ๋ชฉ] ์•ˆ์—๋Š” 0, 1, 2๊ฐ€ ๋“ค์–ด์˜ด(๋ณ€ํ•˜๋Š” index์šฉ๋„)
      <h2>์ œ๋ชฉ { props.title[props.๋ˆ„๋ฅธ์ œ๋ชฉ] }</h2>  // ์Šค๋ฆด๋Ÿฌ ์˜ํ™” ์ถ”์ฒœ
      <p>๋‚ ์งœ</p>
      <p>์ƒ์„ธ๋‚ด์šฉ</p>
    </div>
  )
}
profile
boma91@gmail.com
post-custom-banner

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