Pass Props
Data in components
Data in components ๊ฐ์
![](https://blog.kakaocdn.net/dn/cBjXB5/btrQeMYfNBh/GkXZz24ZRF8qhcOTls20iK/img.png)
โ ์์ ํ ๋์ผํ data๋ฅผ ์๋ก ๋ค๋ฅธ Component์์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ?!
โ ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, ๋ถ๋ชจ-์์ ๊ด๊ณ๋ง ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฒ ์ค์ !
โ ๋ฐ์ดํฐ ํ๋ฆ ํ์
์ฉ์ด
โ ์ ์ง ๋ณด์ ์ฉ์ด
pass props & emit event
โ ๋ถ๋ชจ -> ์์์ผ๋ก์ ๋ฐ์ดํฐ ํ๋ฆ
- pass props
โ ์์ -> ๋ถ๋ชจ๋ก์ ๋ฐ์ดํฐ ํ๋ฆ
- emit event
Pass Props
๊ฐ์
โ ์์์ ์์ฑ(property)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ๋ฌ
โ props๋ ๋ถ๋ชจ(์์) ์ปดํฌ๋ํธ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ง์ ํน์ฑ
โ ์์(ํ์) ์ปดํฌ๋ํธ๋ porps ์ต์
์ ์ฌ์ฉํ์ฌ ์์ ํ๋ props๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์ธ
props in HelloWorld
<!-- HelloWorld.vue -->
<template>
<div class="hello">
<h1>{{ msg }}</h1>
...
</div>
</template>
<!-- HelloWorld.vue -->
<script>
export default {
name: "HelloWorld",
props: {
msg: String,
},
};
</script>
โ Vue CLI๋ฅผ ์ค์นํ ๋ ๋ง๋ค์ด์ฃผ๋ App.vue์ HelloWorld ์ปดํฌ๋ํธ๋ฅผ ์ดํด๋ณด๋ฉด msg๋ผ๋ property ์์ฑ๋์ด ์์
โ App.vue์ <HelloWorld/>
์์์ msg="~"
๋ผ๋ porperty๋ฅผ ์ค์ ํ์๊ณ , ํ์ ์ปดํฌ๋ํธ์ธ HelloWorld๋ ์์ ์๊ฒ ๋ถ์ฌ๋ msg property๋ฅผ template์์ {{ msg }} ํํ๋ก ์ฌ์ฉ
Pass Props
โ ์์ ๊ฐ์ ๋ถ๋ชจ => ์์์ผ๋ก์ data ์ ๋ฌ ๋ฐฉ์
โ ์ ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ static props๋ผ๊ณ ๋ช
์
โ ์์์ ์์ฑ์ ์์ฑํ๋ฏ์ด ์ฌ์ฉ ๊ฐ๋ฅํ์ฌ, prop-data-name="value"
์ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
- ์ด๋ ์์ฑ์ ํค ๊ฐ์ kebab-case๋ฅผ ์ฌ์ฉ
<!-- HelloWorld.vue -->
<script>
export default {
name: "HelloWorld",
props: {
msg: String,
},
};
</script>
โ Props ๋ช
์: ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์ชฝ, ์ฆ ํ์ ์ปดํฌ๋ํธ์์๋ props์ ๋ํด ๋ช
์์ ์ผ๋ก ์์ฑ์ ํด์ฃผ์ด์ผ ํ๋ค.
โ ์ ๋ฌ ๋ฐ์ props๋ฅผ type๊ณผ ํจ๊ป ๋ช
์
โ ์ปดํฌ๋ํธ๋ฅผ ๋ฌธ์ํํ ๋ฟ๋ง ์๋๋ผ, ์๋ชป๋ ํ์
์ด ์ ๋ฌ๋๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ์์์ ์ฌ์ฉ์์๊ฒ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋
MyComponent to MyComponentItem
<!-- MyComponent.vue -->
<template>
<div class="border">
<h1>This is my Component</h1>
<!-- ๋ฐ์ดํฐ ๋ณด๋ด์ฃผ๊ธฐ -->
<MyComponentItem static-props="Data from MyComponent" />
</div>
</template>
<!-- MyComponentItem.vue -->
<template>
<div>
<h3>Child Component of MyComponent</h3>
<p>{{ staticProps }}</p>
</div>
</template>
<script>
export default {
name: "MyComponentItem",
props: {
staticProps: String,
},
};
</script>
![](https://blog.kakaocdn.net/dn/ciuwbe/btrQa3GWtWg/lrIOlzrr9rL2jJYLtm1cM1/img.png)
Pass Props convention
โ ๋ถ๋ชจ์์ ๋๊ฒจ์ฃผ๋ props(HTML)
- kebab-case
โ ์์์์ ๋ฐ๋ props
- camelCase
Dynamic Props
โ ๋ณ์๋ฅผ props๋ก ์ ๋ฌํ ์ ์์
โ v-bind directive๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ๋ฐ์ธ๋ฉ
โ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๊ฐ ์
๋ฐ์ดํธ ๋๋ฉด ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ ๋ํ ์
๋ฐ์ดํธ ๋จ
Dynamic Props ์ค์ต
<!-- MyComponent.vue -->
<template>
<div class="border">
<h1>This is my Component</h1>
<MyComponentItem
static-props="Data from MyComponent"
<!-- ๋์ ๋ฐ์ดํฐ -->
:dynamic-props="dynamicProps"
/>
</div>
</template>
<script>
export default {
...
data: function () {
return {
dynamicProps: "It's in data",
};
},
};
</script>
<!-- MyComponentItem.vue -->
<template>
<div>
<h3>Child Component of MyComponent</h3>
<p>{{ staticProps }}</p>
<p>{{ dynamicProps }}</p>
</div>
</template>
<script>
export default {
name: "MyComponentItem",
props: {
staticProps: String,
dynamicProps: String,
},
};
</script>
![](https://blog.kakaocdn.net/dn/qwieq/btrQfDmewdT/tEsmJtsmGDH4AlNEb3104K/img.png)
์ปดํฌ๋ํธ์ data ํจ์
โ ๊ฐ vue ์ธ์คํด์ค๋ ๊ฐ์ data ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ฏ๋ก ์๋ก์ด data ๊ฐ์ฒด๋ฅผ ๋ฐํ(return)ํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค!
Dynamic Props ์ฃผ์์ฌํญ
โ :dynamic-props="dynamicProps"
๋ ์์ key๊ฐ (dynamic-props)์ด๋ ์ด๋ฆ์ผ๋ก ๋ค์ " "์์ ์ค๋ ๋ฐ์ดํฐ(dynamicProps)๋ฅผ ์ ๋ฌํ๊ฒ ๋ค๋ ๋ป
โ v-bind๋ก ๋ฌถ์ฌ์๋ " "์์ ๊ตฌ๋ฌธ์ javascript ๊ตฌ๋ฌธ์ผ๋ก ๋ณผ ์ ์๋ค.
โ dynamicProps
๋ผ๊ณ ํ๋ ๋ณ์์ ๋ํ data๋ฅผ ์ ๋ฌ ํ ์ ์๋ ๊ฒ!!
<!-- 1: static: ๋ฌธ์์ด '1' ์ ๋ฌ -->
<SomeComponent num-props="1" />
<!-- 2: static: ์ซ์ '1' ์ ๋ฌ -->
<SomeComponent :num-props="1" />
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ
โ ๋ชจ๋ props๋ ๋ถ๋ชจ์์ ์์์ผ๋ก, ์ฆ ์๋๋ก ๋จ๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ ํ์ฑ
โ ๋ถ๋ชจ ์์ฑ์ด ์
๋ฐ์ดํธ ๋๋ฉด ์์์ผ๋ก ํ๋ฅด์ง๋ง ๋ฐ๋ ๋ฐฉํฅ์ ์๋๋ค!
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋ ๋๋ง๋ค ์์ ์ปดํฌ๋ํธ์ ๋ชจ๋ props๊ฐ ์ต์ ๊ฐ์ผ๋ก ์๋ก ๊ณ ์นจ๋จ
โ ํ์ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ฑ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ดํดํ๊ธฐ ํ๋ค๊ฒ ํ๋ ๊ฒ ๋ฐฉ์ง!
'โญ Personal_Study > Vue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vuex (0) | 2022.11.14 |
---|---|
Emit Event (0) | 2022.11.13 |
Vue Component (0) | 2022.11.11 |
SFC (Single File Component) (0) | 2022.11.11 |
Vue_CLI (0) | 2022.11.09 |
๋๊ธ