layout | title | drawings | |
---|---|---|---|
cover |
Introduction à Svelte |
|
Presenté par Papa Elhadj Abdoulaye NDOYE
- 🤔 C'est quoi Svelte ?
- ✨ Le système de réactivité
- 🪄 Runes
- 🧑🏽💻 Coding time
- 📋 Svelte + Todo
{{ $nav.currentPage }} |
{{ $slidev.configs.title }}
{{ $nav.currentPage }} |
{{ $slidev.configs.title }}
Framework JavaScript moderne pour construire des interfaces utilisateur web.
- Crée en novembre 2006 par Rich Harris
- Actuellemnt à la version 5
- Fonctionne comme un compileur afin créer des interfaces web réactives
- Aucun script ou bibliothèque supplémentaire n'est expédié en production
{{ $nav.currentPage }} |
{{ $slidev.configs.title }}
Le cœur de Svelte réside dans son système de réactivité.
```html {*|4,1,3,13|3,13,5,12|3,13,7-10|3,13,9,1|*}
<button id="counter">Compteur: 0</button>
<script>
let count = 0;
const counterEl = document.getElementById('counter');
function increment() {
count += 1;
counterEl.textContent = `Compteur: ${count}`;
}
counterEl.addEventListener('click', increment);
</script>
```
```svelte {*|1,3,9,4|3,9,6-8|*}
<button onclick={increment}>Compteur: {count}</button>
<script>
let count = $state(0);
function increment() {
count += 1;
}
</script>
```
Compteur: {{counter}}
{{ $nav.currentPage }} |
{{ $slidev.configs.title }}
Les runes sont des mot-clefs utilisés dans la syntaxe de Svelte
$state
crée une variable réactive (l'UI va reagir aux changements de cette variable)
```svelte
<script>
let message = $state('hello');
</script>
```
$derived
utilisée pour créer des valeurs dérivées qui réagissent aux changements de leurs dépendances
```svelte
<script>
let message = $state('hello');
let messageLength = $derived(message.length)
</script>
```
$props
utilisée pour déclarer et accéder aux propriétés d'un composant
```svelte
<script>
const {propNum1, propNum2} = $props()
</script>
```
{{ $nav.currentPage }} |
{{ $slidev.configs.title }}
::right::
- Connaissance de base en HTML et CSS
- Familier avec JavaScript
- Node.js dans votre machine
- Un éditeur de texte
{{ $nav.currentPage }} |
{{ $slidev.configs.title }}
Votre navigateur ne supporte pas les vidéos 😢. Toutefois vous pouvez la télécharger ici.
{{ $nav.currentPage }} |
{{ $slidev.configs.title }}
- Installer les dépendances avec
npm install
- Ouvrir le projet sur votre editeur
- Visualiser le project avec
npm run dev
- Visiter
http://localhost:5173
sur votre navigateur
::right::
Votre navigateur ne supporte pas les vidéos 😢. Toutefois vous pouvez la télécharger ici.
- Ouvrir
+page.svelte
- Ajouter ces lines 👇🏿 dans le
<script
tag
<script>
import '../app.css';
let todos = $state([
{id: '1', title: 'Item #1', completed: false },
{id: '2', title: 'Item #2', completed: false },
])
</script>
Ici nous avons créer une variable réactive avec
$state()
et nous allons l'utiliser dans notre markup HTML.
- Selectionnez tout le contenu de la balise
<ul class="todo__list">
- Supprimez tout
- Remplacer par ce bout de code
<ul class="todo__list">
{#each todos as todo, i (todo.id)}
<li class="todo__list__item">
<label>
<input bind:checked={todos[i].completed} type="checkbox" id="todo-{todo.id}" name="todo-{todo.id}" />
<span>{todo.title}</span>
</label>
<button aria-label="Supprimer todo">
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
<path
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M3 6h18m-2 0v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6m3 0V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2m-6 5v6m4-6v6"
/>
</svg>
</button>
</li>
{/each}
</ul>
- Ajout de la fonction
addTodo()
- Utilisation de crypto.randomUUID() pour générer des IDs
<script>
function addTodo (e) {
if (e.key === 'Enter') return
todos.push({ id: crypto.randomUUID(), title: e.target.value, completed: false })
e.target.value = ''
}
</script>
- Utilisation de l'event keydown
<header class="todo__header">
<input
onkeydown={addTodo}
placeholder="Ajouter une todo"
type="text" />
</header>
- Ajout de la fonction
deleteTodo(id)
<script>
function addTodo (id) {
todos = todos.filter(todo => todo.id !== id)
}
</script>
- Utilisation de l'event click sur le
button
<button onclick={() => deleteTodo(todo.id)} aria-label="Supprimer todo">
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
<path
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M3 6h18m-2 0v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6m3 0V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2m-6 5v6m4-6v6"
/>
</svg>
</button>
Pour le reste vous pouvez suivre ces liens
- Lien pour la solution ici
- Documentation officielle de Svelte
- Tutoriel Svelte