2022. 3. 19. 00:14ใFront-End ์์ ์ค/Vue.js
๐ 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>
์ถ๋ ฅ ๊ฒฐ๊ณผ
๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ 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๋ ์๋ต ๊ฐ๋ฅํ ๊ฒ์ด์์.
'Front-End ์์ ์ค > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] tiptap Editor ์ฐ๋ (0) | 2022.03.23 |
---|---|
[Vue.js] Template refs (0) | 2022.03.19 |
[Vue.js] axios ์ค์น (0) | 2022.03.18 |
[Vue.js] vue-router.esm-bundler.js?ec2d:72 [Vue Router warn]: No match found for location with path "/support/devInquryList" (0) | 2022.03.15 |
[Vue.js] ๊ธฐ์ด ๊ฐ๋ ์ ๋ฆฌ - Watch, Array, for๋ฌธ(๋ฐ๋ณต๋ฌธ), if๋ฌธ (0) | 2022.03.08 |