VueJS - Components: Building Blocks of Modern Web Applications
Bonjour là-bas, futurs magiciens de Vue.js ! Je suis ravi de vous guider dans cette incroyable aventure dans le monde des composants Vue.js. En tant que quelqu'un qui enseigne la programmation depuis des années, je peux vous dire que comprendre les composants, c'est comme apprendre à utiliser des blocs LEGO - une fois que vous avez compris, vous pouvez construire des choses incroyables ! Alors, plongeons dedans et amusons-nous !
Qu'est-ce que les composants Vue.js ?
Les composants sont le cœur et l'âme des applications Vue.js. Pensez-y comme des morceaux de code réutilisables qui encapsulent HTML, CSS et JavaScript. tout comme vous pouvez utiliser différents blocs LEGO pour construire un château, vous pouvez utiliser différents composants pour construire une application web complexe.
Voici un exemple simple d'un composant Vue :
<template>
<div class="greeting">
<h1>{{ message }}</h1>
</div>
</template>
<script>
export default {
data() {
return {
message: "Bonjour, composant Vue !"
}
}
}
</script>
<style scoped>
.greeting {
color: bleu;
}
</style>
Décomposons cela :
- La section
<template>
contient la structure HTML de notre composant. - La section
<script>
définit la logique et les données du composant. - La section
<style>
(avec l'attributscoped
) contient le CSS qui s'applique uniquement à ce composant.
Créer et utiliser des composants
Maintenant que nous savons à quoi ressemblent les composants, créons-en un et utilisons-le dans notre application !
Étape 1 : Créer un nouveau composant
Créez un nouveau fichier appelé Greeting.vue
dans le dossier components
de votre projet :
<!-- Greeting.vue -->
<template>
<div class="greeting">
<h2>{{ greeting }}</h2>
</div>
</template>
<script>
export default {
data() {
return {
greeting: "Bienvenue dans Vue.js !"
}
}
}
</script>
<style scoped>
.greeting {
font-style: italic;
color: vert;
}
</style>
Étape 2 : Utiliser le composant dans votre application
Maintenant, utilisons ce composant dans notre fichier principal App.vue
:
<!-- App.vue -->
<template>
<div id="app">
<h1>Mon application Vue.js</h1>
<Greeting />
</div>
</template>
<script>
import Greeting from './components/Greeting.vue'
export default {
name: 'App',
components: {
Greeting
}
}
</script>
Voici ce qui se passe :
- Nous importons le composant
Greeting
. - Nous le enregistrons dans l'option
components
de notre composant App. - Nous l'utilisons dans notre template avec l'étiquette
<Greeting />
.
Et voilà ! Vous venez de créer et d'utiliser votre premier composant Vue !
Props : Transmettre des données aux composants
Les props sont comme des tuyaux magiques qui vous permettent d'envoyer des données d'un composant parent à un composant enfant. Améliorons notre composant Greeting
pour qu'il accepte un message personnalisé :
<!-- Greeting.vue -->
<template>
<div class="greeting">
<h2>{{ customGreeting }}</h2>
</div>
</template>
<script>
export default {
props: ['message'],
computed: {
customGreeting() {
return `${this.message} Bienvenue dans Vue.js !`
}
}
}
</script>
Maintenant, nous pouvons l'utiliser comme ceci dans notre App.vue
:
<!-- App.vue -->
<template>
<div id="app">
<h1>Mon application Vue.js</h1>
<Greeting message="Bonjour, cher étudiant !" />
<Greeting message="Salutations, passionné de Vue !" />
</div>
</template>
C'est génial, non ? Nous pouvons réutiliser le même composant avec différents messages !
Émettre des événements : Communication enfant-parent
While props allow parent-to-child communication, events enable child-to-parent communication. It's like a child asking their parent for ice cream!
Let's create a Button
component that emits an event when clicked:
<!-- 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>
Now, let's use this in our 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>
When the button is clicked, it emits an event that the parent component listens for and responds to. It's like a harmonious family conversation!
Slots : Contenu flexible des composants
Slots are like placeholders in your components that you can fill with whatever content you want. They're incredibly useful for creating flexible, reusable components.
Let's create a Card
component with a slot:
<!-- 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>
Now we can use this Card
component with different content:
<!-- 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>
Dynamic Components
Dynamic components allow you to switch between different components dynamically. It's like having a Swiss Army knife of components!
Let's create a simple example:
<!-- 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>
In this example, we use the <component>
element with the is
attribute to dynamically render either the Greeting
or Button
component based on which button is clicked.
Conclusion
Congratulations! You've just taken your first steps into the wonderful world of Vue.js components. Remember, like with any skill, practice makes perfect. Don't be afraid to experiment and build your own components. Before you know it, you'll be creating complex, interactive web applications with ease!
Here's a quick reference table of the component features we've covered:
Feature | Description |
---|---|
Basic Structure | Template, Script, and Style sections |
Props | Pass data from parent to child |
Events | Communication from child to parent |
Slots | Flexible content placeholders |
Dynamic Components | Switch between components on the fly |
Keep coding, keep learning, and most importantly, have fun with Vue.js!
Credits: Image by storyset