vue์ ๋ฌธ๋ฒ์ ์ตํ๋ ค๋ฉด ์ฌ๋ฌ๊ฐ์ง ์ ์ค์ผ์ด์ค๋ฅผ ์ง์ ๋ค๋ค๋ด์ผ ํ๋ค.
props๋ฅผ ์ด์ฉํ์ฌ, ์์ ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ๋ฅผ ์ฌํ์ฉ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ๋ณด์ด๊ณ ,
์์ฑ์ ์ด๋ค์์ผ๋ก ๋ณด๋ด๋์ง ์ดํด๋ณด๋๊ฒ ์ด๋ฒ ๊ธ์์์ ํต์ฌ์ด๋ค.
๋ํ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์๋ ์๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค์์ผ๋ก ๋ฐ์ธ๋ฉํ๋์ง :(์ฝ๋ก ) ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ํ์ธํด๋ณด์.
App.vue
1. ์ปดํฌ๋ํธ ํ์ผ์ ๋ถ๋ฌ์ฌ๋๋ import / from ์ ํ์ฉํ๋๋ก ํ๋ค.
2. ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ ๋ฐ์ดํฐ๋ data ์์ ๋ฃ์ด๋๊ณ , :color ์ด๋ฐ์์ผ๋ก ๋ฐ์ธ๋ฉํด์ ์ฌ์ฉํ๋๋ก ํ๋ค.
MyBtn1.vue
1. components ํด๋ ์์ ์๋ ์ปดํฌ๋ํธ ํ์ผ๋ก์, ์์ ์ปดํฌ๋ํธ ์ญํ ์ ์ํํ๋ค.
2. props๋ก ์์์์๋ ์ด๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ง ์์ฑ๋ช ์ props ์์ ์ ๊ณ , ๊ทธ ๊ฐ์ ์ด๋ค์์ผ๋ก ํํ๋๋์ง type๊ณผ default ๊ฐ์ ์ค์ ํด๋๋ค.
3. ์ฌ์ฌ์ฉ๋์ด ์ง๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ํน์ง์ด๋ฏ๋ก, DOM์์ ๋ณด์ฌ์ง๋ template ์ ๊ตฌ์กฐ์์ :style ์ ์ด๋ค ๊ฐ๋ค์ด ์ค๋์ง๋ฅผ "{ backgroundColor: color } " ์ด๋ฐ์์ผ๋ก ์ผ๋ฐฅ์ผ์ด์ค ํ์์ผ๋ก ์์ฑํด์ค๋ค.
<template>
<div
:style="{ backgroundColor: color }"
class="btn">
Apple
</div>
</template>
<script>
export default {
props: {
color: {
type: String,
default: 'gray'
}
}
}
</script>
<style scoped>
.btn {
display: inline-block;
margin: 4px;
padding: 6px 12px;
border-radius: 4px;
background-color: gray;
color: white;
cursor: pointer;
}
</style>
<์ถ๊ฐํ ๋ด์ฉ>
4. ๊ฐ์ฒด ๋ฐ์ดํฐ ๋ด๋ถ์์ '์์ฑ๊ณผ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ' ๊ฐ์ ์๋ตํด์ค ์ ์๋ค.
- large ๋ผ๋ ์์ฑ์ ์ด๋ป๊ฒ ํํํ๋์ง ํ์ธํด๋ณด์.
<template>
<div
:class= "{ large : large }"
...
์ด๋ ๊ฒ ์์ฑํ ์ฝ๋๋ฅผ
<template>
<div
:class= "{ large }"
์ด๋ฐ์์ผ๋ก ์์ฑํ๊ณ , ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
<script>
export default {
props: {
color: {
type: String,
default: 'gray'
},
large: {
type: Boolean,
default: false
}
}
...
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด, ํน์ ๋ฒํผ์ ํด๋์ค์ ๋ช ์ ์ถ๊ฐ๋ก ๋ด์ฉ์ ๊ธฐ์ ํ ์ ์๋ค.
์ด๋ ๊ฒ ํน์ ํด๋์ค ๋ช ์ ๋ฐ๊พธ๋ฉด ๋ค์๊ณผ ๊ฐ์ด, ์ผ๋ถ ๋ฒํผ์ ์คํ์ผ์ ์กฐ์ ํ ์ ์๋ค.
MyBtn1.vue / ํ๋ฉดํฌ๊ธฐ
<style scoped>
.btn {
display: inline-block;
margin: 4px;
padding: 6px 12px;
border-radius: 4px;
background-color: gray;
color: white;
cursor: pointer;
}
.btn.large {
font-size: 20px;
padding: 10px 20px;
}
</style>
์ฌ๊ธฐ์ .btn ๊ณผ .btn.large ์ ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, scss ๋ฌธ๋ฒ์ ํ์ฉํ๋ ๊ฒ์ด๋ค.
scss ์์๋ ์ซ์ 7์ ์๋ ๋ฌธ์์ธ & ์ ์ด์ฉํ๋ฉด, ๋์ผํ ๋ฌธ์๋ฅผ ๋์ฒดํด์ ๋ค์ ์ถ๊ฐ๋ก ์ฒด์ธํ์์ผ๋ก ๊ฐ์ ๋ฃ์ด์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. scss ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ค๋ฉด style ํ๊ทธ์์ scoped lang ๋ถ๋ถ์์ "scss"๋ฅผ ์ถ๊ฐํด์ค๋ค๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํด์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด๋ณผ ์ ์๋ค.
<style scoped lang="scss">
.btn {
display: inline-block;
margin: 4px;
padding: 6px 12px;
border-radius: 4px;
background-color: gray;
color: white;
cursor: pointer;
&.large {
font-size : 20px;
padding: 10px 20px;
}
}
</style>
๊ตฌํ ํ๋ฉด
'๐๏ธ์ํํธ์จ์ด > ๐Vue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
vue์์ eslint ์ฌ์ฉํ๊ธฐ(eslintrc.js) (0) | 2023.04.09 |
---|---|
[Vue.js] ์กฐ๊ฑด๋ถ ๋ ๋๋ง๊ณผ ๋ฒํผ ํ์ฑํํ๊ธฐ (0) | 2022.12.12 |
npx, npm์ ์ฐจ์ด์ vscode ์คํ ๋ฐฉ๋ฒ (0) | 2022.12.02 |
[Vue.js]ํน์ ๋ฐ์ดํฐ๋ค์ ๊ฐ๋ค์ ํ์ด๋ผ์ดํ ํ ์๋ ์์๊น? (0) | 2022.12.01 |