728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- slot ์ ์ฌ์ฉํด์ ํํฐ๊ฐ ์์์ง ์ด๋ฏธ์ง๋ค์ ๊ฐ๊ฐ์ ํด๋นํ๋ ํํฐ ์ด๋ฆ์ ๋ถ์ฌ๋ณด์๋ค.
- ๊ธฐ์กด์ ๋ง๋ค์ด๋์ ๋ ์ด์์์ slot ๋ง ์ถ๊ฐํ๋๋ ํํฐ๊ฐ ์์์ง ์ด๋ฏธ์ง ์์ ํํฐ ์ด๋ฆ์ด ๊ฒน์ณ๋์์ FilterBox.vue ํ์ผ์ ๋ ์ด์์์ ์ ๋ฐ์ ์ผ๋ก ์์ ํด์ฃผ์๋ค.
- ๊ทธ๋ฌ๊ณ ๋์, ์์ ์ด๋ฏธ์ง๋ค์ ํํฐ๊ฐ ์ ์ฉ์ด ์๋๋ ์ํฉ์ด ๋ฐ์ํ๋๋ฐ, ์ด๋ Container.vue ์์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆด ๋ filter ์์๋ค์ data ๋ณด๊ดํจ์ ์ ์ฅํ๋ค๊ฐ props ๋ฌธ๋ฒ์ผ๋ก FilterBox.vue ๋ก ๋ฐ์์์ ๋ฑ๋กํ ๋ค ์ฌ์ฉํ๋ ์ ์์ ์ผ๋ก ํํฐ๊ฐ ๊ฐ ์ด๋ฏธ์ง์ ์ ์ฉ์ด ๋์๋ค.
(์ดํ, App.vue ์์๋ filter ํญ๋ชฉ์ ์ฌ์ฉํ ์ผ์ด ์๊ฒจ ๊ธฐ์กด์ Container.vue ์ ์๋ data ๋ณด๊ดํจ์ filter ํญ๋ชฉ์ App.vue ๋ก ์ฎ๊ฒจ์ฃผ๊ณ ๋ชจ๋ ํ์ Component ์๋ props ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ ์ ์กํด์ฃผ์๋ค.) - slot ์ ํตํด ์ ์ฉํ ํํฐ ์ด๋ฆ์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ์ชฝ ์ ๋ ฌ์ด์๋๋ฐ, <slot></slot> ์ ์ด ์์ฒด๋ก css ์คํ์ผ๋ง์ด ์ ๋๋ก ๋์ง ์์ผ๋ฏ๋ก <div></div> ์ ๋ด์์ ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํด์ฃผ์๋ค.
๐ ๋ค์ด๊ฐ๊ธฐ ์ ์
<div :class="๋ฐ์ดํฐ" class="filter-item"> </div>
- Vue ์์๋ ์์ ๊ฐ์ด html ํ๊ทธ ์์ class="" ํ์์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ ์ ์๋ค.
๐ slot ๋ฌธ๋ฒ ์์๋ณด๊ธฐ
- ์์ Component ๊ฐ ๋ถ๋ชจ Component ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก props ๋ก ์ ์ก๋ฐ์์ผ ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ ์ก๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋กํด์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์์ ๊ฐ์ด props ๋ฌธ๋ฒ์ ์ฌ์ฉ์ด ๊ท์ฐฎ์ ๋ ๋์ฉ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐํธํ ๋ฌธ๋ฒ์ด ๋ฐ๋ก slot ๋ฌธ๋ฒ์ด๋ค.
๐ค slot ๋ฌธ๋ฒ ์ฌ์ฉํ๊ธฐ
- ์์ Component ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์์น๋ฅผ ์ ํด์ <slot></slot> ์ด๋ผ๋ html ํ๊ทธ๋ฅผ ์์ฑํ๋ค.
- ๋ถ๋ชจ Component ์์ <์์ Component></์์ Component> ์ฌ์ด์ ์์ Component ์ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
- ์์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ๋ฐ๋ก ๋ฑ๋กํ๋ ๊ณผ์ ํ์์์ด ๋ถ๋ชจ Component ๊ฐ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ์์ Component ๋ด์ <slot></slot> ์ฌ์ด์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ๋ค๋ง, props ๋ src ๋ style ์์ฑ์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง, slot ์ ๋ฑ html ํ๊ทธ ์ฌ์ด์ ๋ด์ฉ์ ์์ฑํ๋ฏ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๐ค Named Slots
- ๋ถ๋ชจ Component ์์ ์ ์กํ ๋ฐ์ดํฐ๊ฐ ๋ง์์ ์ฌ๋ฌ๊ฐ์ <slot></slot> ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ๊ฐ ๊ตฌ๋ถํ๊ธฐ ์ํด name ์์ฑ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ Named Slots ์ด๋ผ๊ณ ํ๋ค.
<slot name="a"></slot>
- ์์ Component ๋ ์์ ๊ฐ์ด name ์ ์ํ๋ ๋๋ก ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
<์์ Component>
<template v-slot:a>๋ฐ์ดํฐ</template>
</์์ Component>
- ๊ทธ๋ฌ๋ฉด ๋ถ๋ชจ Component ์์๋ <์์ Component></์์ Component> ์ฌ์ด์ <template v-slot:์์_Component์_์ ์_์ด๋ฆ>์ ์กํ _๋ฐ์ดํฐ</template> ์ ํ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ฌ ํน์ ์์ Component ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ ๊ฒ์ด๋ค.
๐ค Slot Props
- ๋ถ๋ชจ Component ๋ ๊ฐ๋ ์์ Component ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๊ณ ์ถ์ ๋๊ฐ ์๋๋ฐ, ๊ทธ๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด Slot Props ์ด๋ค.
<slot :๋ฐ์ดํฐ="๋ฐ์ดํฐ"></slot>
- ์์ Component ๋ slot ์ ์ฌ์ฉํ ๋ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ชจ Component ๋ก ๋ณด๋ผ ์ ์๋ค.
<์์ Component>
<template v-slot:default="์๋ช
"> {{์๋ช
.๋ฐ์ดํฐ}}</template>
</์์ Component>
- ์ด์ ๋ถ๋ชจ Component ๊ฐ ์์ Component ๋ก๋ถํฐ ์ ์ก๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด, v-slot: ์์ default ์ ๋ฐ์ ๋ฐ์ดํฐ๋ค์ ํต์นญํ ์ด๋ฆ์ ์ง์ ํด์ ๊ฐ์ด ์ ์ด์ค๋ค.
- ์ด์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ ์ง์ ํ ์ด๋ฆ์ ์ ์ฅ์ด ๋๊ณ ์ด๋ object ํ์ ์ด๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ด ์ฌ์ฉํ ๋์๋ object ํ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ฏ ์ฌ์ฉํ๋ฉด ๋๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] Vuex1: Vuex ์ ํ ํ๊ธฐ (0) | 2022.04.07 |
---|---|
[Vue.js] mitt ์ ์ฌ์ฉํ์ฌ ๋ฉ๋ฆฌ ๋จ์ด์ง Component ๊ฐ ๋ฐ์ดํฐ ์ ์กํ๊ธฐ (0) | 2022.04.07 |
[Vue.js] ์ธ์คํ๊ทธ๋จ ํํฐ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.04.07 |
[Vue.js] ๊ธ๋ฐํ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.04.06 |
[Vue.js] ์๋ฒ ์์ด ์ ๋ก๋ํ ์ด๋ฏธ์ง ๋ค๋ฃจ๊ธฐ (0) | 2022.04.06 |