[Vue.js] Props

2022. 3. 19. 00:14ใ†Front-End ์ž‘์—…์‹ค/Vue.js

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿš€ Props

    ๐Ÿ”ฝ Props๋กœ Data ์ „๋‹ฌ

๋ชจ๋“  Component Instance๋Š” ์ž์ฒด ๊ฒฉ๋ฆฌ๋œ ๋ฒ”์œ„๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ์ฆ‰, ํ•˜์œ„ ์ปดํฌ๋„Œํ„ฐ์˜ ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ฐธ์กฐ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ฒƒ์ด์—์š”. JAVA๋กœ ๋น„์œ ํ•˜์ž๋ฉด ๋‹คํ˜•์„ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์ธ ๊ฑฐ ๊ฐ™์•„์š”.

Data๋Š” `props` Option์„ ์ด์šฉํ•˜์—ฌ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

prop์€ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ํŠน์„ฑ์ธ ๊ฒƒ์ด์—์š”. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” `props` option์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜์‹ ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋˜๋Š” Props๋ฅผ ๋ช…์‹œ์  ์„ ์–ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

์˜ˆ์‹œ ์ฝ”๋“œ

Vue.component('child', {
  // props ์ •์˜
  props: ['message'],
  // ๋ฐ์ดํ„ฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ prop์€ ํ…œํ”Œ๋ฆฟ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ
  // vm์˜ this.message๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  template: '<span>{{ message }}</span>'
})

 

์œ„์™€ ๊ฐ™์ด ์ •์˜ํ•˜๊ณ , ๋ฌธ์ž์—ด์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

<child message="์•ˆ๋…•ํ•˜์„ธ์š”!"></child>

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

์•ˆ๋…•ํ•˜์„ธ์š”!

 

 

 

 

    ๐Ÿ”ฝ ๋™์  Props

์ •๊ทœ ์†์„ฑ์„ ํ‘œํ˜„์‹์— Bindingํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๊ฒŒ, v-bind๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ€๋ชจ์˜ Data์— props๋ฅผ ๋™์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. Data๊ฐ€ ์ƒ์œ„์—์„œ Update(์ตœ์‹ ํ™”) ๋  ๋•Œ ๋งˆ๋‹ค ํ•˜์œ„ Data๋กœ๋„ ์ „๋‹ฌ ๋˜๋Š” ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค.

<div>
  <input v-model="parentMsg">
  <br>
  <child v-bind:my-message="parentMsg"></child>
</div>
๋ฐ˜์‘ํ˜•

 

`V-bind`์— ๋Œ€ํ•œ ๋‹จ์ถ• ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ํŽธ๋ฆฌํ•œ ๊ฒƒ์ด์—์š”.

<child :my-message="parentMsg"></child>

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

์ถœ์ฒ˜ :&nbsp;https://kr.vuejs.org/v2/guide/components.html

 

๊ฐ์ฒด์˜ ๋ชจ๋“  ์†์„ฑ์„ props๋กœ ์ „๋‹ฌํ•˜๋ ค๋ฉด ์ธ์ž์—†์ด `v-bind`๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. (v-bind:prop-name ๋Œ€์‹  v-bind) ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด

todo: {
  text: 'Learn Vue',
  isComplete: false
}

 

๊ทธ๋Ÿฐ ๋‹ค์Œ

<todo-item v-bind="todo"></todo-item>

 

์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

<todo-item
  v-bind:text="todo.text"
  v-bind:is-complete="todo.isComplete"
></todo-item>

 

์ฐธ๊ณ ๋กœ v-bind:{props ์ด๋ฆ„} ์—์„œ v-bind๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•