VueJS - 컴포넌트: 현대 웹 애플리케이션의 건축 블록
안녕하세요, 미래의 Vue.js 마법사 여러분! Vue.js 컴포넌트의 세상으로 이끌어주는 여정에 함께할 수 있어 기쁩니다. 프로그래밍을 가르치고 있는 지 오래된 저로서는, 컴포넌트를 이해하는 것은 LEGO 블록을 사용하는 것과 같다고 말씀드릴 수 있습니다. 한 번 익혀보면 놀라운 것들을 만들 수 있습니다! 그럼 이제 즐겁게 시작해보겠습니다!
Vue.js 컴포넌트는 무엇인가요?
컴포넌트는 Vue.js 애플리케이션의 핵심입니다. HTML, CSS, 그리고 JavaScript 기능을 포함한 재사용 가능한 코드 조각으로 생각해보세요. LEGO 조각들을 사용하여 성을 짓는 것처럼, 다양한 컴포넌트를 사용하여 복잡한 웹 애플리케이션을 만들 수 있습니다.
이하에 Vue 컴포넌트의 간단한 예제를 보여드리겠습니다:
<template>
<div class="greeting">
<h1>{{ message }}</h1>
</div>
</template>
<script>
export default {
data() {
return {
message: "Hello, Vue Component!"
}
}
}
</script>
<style scoped>
.greeting {
color: blue;
}
</style>
이를 분해해보면:
-
<template>
섹션은 컴포넌트의 HTML 구조를 포함합니다. -
<script>
섹션은 컴포넌트의 논리와 데이터를 정의합니다. -
<style>
섹션(scoped
속성 포함)은 이 컴포넌트에만 적용되는 CSS를 포함합니다.
컴포넌트 생성 및 사용
이제 컴포넌트의 모양을 알고 있으므로, 하나를 만들어 애플리케이션에서 사용해보겠습니다!
단계 1: 새로운 컴포넌트 생성
프로젝트의 components
폴더에 Greeting.vue
파일을 생성합니다:
<!-- Greeting.vue -->
<template>
<div class="greeting">
<h2>{{ greeting }}</h2>
</div>
</template>
<script>
export default {
data() {
return {
greeting: "Welcome to Vue.js!"
}
}
}
</script>
<style scoped>
.greeting {
font-style: italic;
color: green;
}
</style>
단계 2: 애플리케이션에서 컴포넌트 사용
이제 이 컴포넌트를 주 App.vue
파일에서 사용해보겠습니다:
<!-- App.vue -->
<template>
<div id="app">
<h1>My Vue.js App</h1>
<Greeting />
</div>
</template>
<script>
import Greeting from './components/Greeting.vue'
export default {
name: 'App',
components: {
Greeting
}
}
</script>
이렇게 되고 있습니다:
-
Greeting
컴포넌트를 가져옵니다. - App 컴포넌트의
components
옵션에 등록합니다. - 템플릿에서
<Greeting />
태그로 사용합니다.
그렇게 하면! 여러분이 첫 번째 Vue 컴포넌트를 생성하고 사용한 것입니다!
Props: 컴포넌트로 데이터 전달
Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 보내는 마법의 파이프입니다. Greeting
컴포넌트를 개선하여 커스텀 메시지를 받을 수 있도록 합시다:
<!-- Greeting.vue -->
<template>
<div class="greeting">
<h2>{{ customGreeting }}</h2>
</div>
</template>
<script>
export default {
props: ['message'],
computed: {
customGreeting() {
return `${this.message} Welcome to Vue.js!`
}
}
}
</script>
이제 App.vue
에서 다음과 같이 사용할 수 있습니다:
<!-- App.vue -->
<template>
<div id="app">
<h1>My Vue.js App</h1>
<Greeting message="Hello, dear student!" />
<Greeting message="Greetings, Vue enthusiast!" />
</div>
</template>
이Isn't that cool? We can reuse the same component with different messages!
이벤트 발생: 자식에서 부모로의 통신
Props는 부모에서 자식으로의 통신을 가능하게 하지만, 이벤트는 자식에서 부모로의 통신을 가능하게 합니다. 자식이 부모에게 아이스크림을 달라고 하는 것과 같은 것입니다!
이제 클릭 시 이벤트를 발생시키는 Button
컴포넌트를 생성해보겠습니다:
<!-- Button.vue -->
<template>
<button @click="handleClick">{{ label }}</button>
</template>
<script>
export default {
props: ['label'],
methods: {
handleClick() {
this.$emit('button-clicked', 'The button was clicked!')
}
}
}
</script>
이제 이를 App.vue
에서 사용해보겠습니다:
<!-- App.vue -->
<template>
<div id="app">
<h1>My Vue.js App</h1>
<Button label="Click me!" @button-clicked="handleButtonClick" />
<p>{{ message }}</p>
</div>
</template>
<script>
import Button from './components/Button.vue'
export default {
name: 'App',
components: {
Button
},
data() {
return {
message: ''
}
},
methods: {
handleButtonClick(msg) {
this.message = msg
}
}
}
</script>
버튼이 클릭될 때, 부모 컴포넌트가 이벤트를 듣고 응답합니다. 조화로운 가족 대화와 같습니다!
슬롯: 유연한 컴포넌트 콘텐츠
슬롯은 컴포넌트 내의 플레이스홀더로, 원하는 콘텐츠로 채울 수 있습니다. 유연하고 재사용 가능한 컴포넌트를 만드는 데 매우 유용합니다.
Card
컴포넌트에 슬롯을 추가해보겠습니다:
<!-- Card.vue -->
<template>
<div class="card">
<div class="card-header">
<h3>{{ title }}</h3>
</div>
<div class="card-body">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
props: ['title']
}
</script>
<style scoped>
.card {
border: 1px solid #ccc;
border-radius: 4px;
padding: 10px;
margin-bottom: 10px;
}
.card-header {
background-color: #f1f1f1;
padding: 5px;
}
</style>
이제 Card
컴포넌트를 다양한 콘텐츠로 사용할 수 있습니다:
<!-- App.vue -->
<template>
<div id="app">
<Card title="Welcome">
<p>Welcome to our Vue.js tutorial!</p>
</Card>
<Card title="About Components">
<ul>
<li>Components are reusable</li>
<li>They can have props</li>
<li>They can emit events</li>
</ul>
</Card>
</div>
</template>
<script>
import Card from './components/Card.vue'
export default {
name: 'App',
components: {
Card
}
}
</script>
동적 컴포넌트
동적 컴포넌트는 다양한 컴포넌트를 동적으로 전환할 수 있습니다.瑞士軍刀의 컴포넌트와 같은 것입니다!
간단한 예제를 만들어보겠습니다:
<!-- App.vue -->
<template>
<div id="app">
<button @click="currentComponent = 'Greeting'">Show Greeting</button>
<button @click="currentComponent = 'Button'">Show Button</button>
<component :is="currentComponent"></component>
</div>
</template>
<script>
import Greeting from './components/Greeting.vue'
import Button from './components/Button.vue'
export default {
name: 'App',
components: {
Greeting,
Button
},
data() {
return {
currentComponent: 'Greeting'
}
}
}
</script>
이 예제에서, <component>
엘리먼트와 is
어트리뷰트를 사용하여 Greeting
또는 Button
컴포넌트를 클릭한 버튼에 따라 동적으로 렌더링합니다.
결론
축하합니다! Vue.js 컴포넌트의 fascinante 세상으로的第一步을踏み出しました。いかなるスキルでも、練習は完璧を生みます。実験を恐れず、自分自身のコンポーネントを作成してください。それでは、複雑でインタラクティブなウェブアプリケーションを簡単に作成するまでに、すぐに到達することでしょう!
ここでカバーしたコンポーネントの機能の簡単な参照表を示します:
機能 | 説明 |
---|---|
基本構造 | Template、Script、Styleセクション |
Props | 親から子へのデータ伝達 |
イベント | 子から親への通信 |
スロット | ゆるやかなコンテンツプレイスホルダー |
动态组件 | コンポーネント間の切换 |
コードを続け、学びを続け、最も重要なことは、Vue.jsを楽しむことです!
Credits: Image by storyset