Architecture de composants

Chapitre 2

Exemple: mutations
04:16

Example

Implémente addOne, qui augmente le compteur de 1 lorsque l'on clique sur le bouton.

Mutations du DOM
04:16

Sans utiliser les frameworks et les librairies modernes, la tâche la plus difficile en JavaScript est de synchroniser l'état et le DOM.

Question

Pourquoi les modifications du DOM sont-elles difficiles?

  • Robustesse: que faire quand l'HTML change?
  • Encapsulation: comment être sûr que quelqu'un ne détruit pas quelque chose d'essentiel quelque part d'autre?
  • Réusabilité: et si on voulait réutiliser certains éléments de l'interface?

React: composants
04:16

Logo de React

En 2013, la librairie React (Facebook) introduit l'architecture des composants.

Definition (Définition)

Un composant est une unité de code contenant une pièce spécifique de fonctionalité ou d'UI.

En des termes plus pratiques, pensez à une balise HTML qui implémenterait du HTML, du CSS et du JavaScript.

Example (Code de ce slide)

Idée originale de React
04:16

Idea

Recréer entièrement une copie de l'interface à chaque changement, les comparer pour effectuer les changements nécéssaire minimaux.

Pokemon battle as UI example

Remark

Ceci nous permet d'écrire les UI de manière déclarative. Le programmeur ne doit s'occuper que de l'état.

Virtual DOM
04:16

Virtual DOM in React

React recrée l'interface à chaque changement d'état dans une copie (le virtual DOM) et le compare au DOM du navigateur pour effectuer la mise à jour la plus petite possible).

Remark

L'idée de base était de combiner la simplicité d'écrire une UI de zéro tout en gardant une certaine performance. Aujourd'hui, on se demande si le modèle limite un peu trop la performance.

React: exemple
04:16

Frameworks dominants
04:16

Actuellement, les principaux frameworks sont

Question

Comment choisit-on un framework?

En employant des critères tels que

  • L'écosystème développé par les auteurs et la communauté
  • La "simplicité"
  • JSX, SFC ou templates?
  • Performance
  • Compatibilité avec les outils
  • Intégration avec le backend
  • etc.

State of Javascript 2022
04:16

Présentation de Svelte
04:16

La plupart des concepts introduits par les frameworks sont les mêmes. Nous les introduiserons par Svelte. La spécificité est de fournir une DX similaire à React avec plus de performance car on n'emploie pas de Virtual DOM.

Logo de svelte
Auteur
Rich Harris
Première version
Novembre 2016
Version courante
4.1.2
License
MIT
Langage
JavaScript

Pourquoi Svelte?
04:16

React vs Svelte

Svelte a une syntaxe plus concise que React, et nous permettra de nous concentrer sur les concepts.

Un premier exemple: le compteur
04:16

Svelte utilise le principe d'un composant par fichier (SFC), comme Vue.js. Imaginons que le fichier Counter.svelte contienne le code suivant:

Vous pourrez réutiliser ce composant de la manière suivante:

Props
04:16

Parfois vous voulez utiliser deux instances différentes du même composant.

Question

Comment faire passer la propriété (prop) name = 'Mewtwo' au composantPokemon?

En Svelte: avec le mot clé export

Exemple: props
04:16

App.svelte (ou autre fichier)

Affichage conditionnel
04:16

Dans Svelte, on peut employer {#if ...}, {:else if ...}, {:else} et {/if} pour le rendu conditionnel.

Slots
04:16

La balise spéciale slot est remplacée par les enfants du composants.

Button.svelte

App.svelte (ou autre fichier)

Two-way binding
04:16

Lorsque l'on travaille avec des formulaires, il est nécéssaire de pouvoir lier une variable et la valeur d'un champ de texte. En svelte, ça se fait via la directive bind:value.

Exemple: Formulaire
04:16

État dérivé
04:16

Dans Svelte, une assignation réactive est préfixée par $:. De telles quantités sont recalculées à chaque changement d'une dépendance.

Réactivité: exemple
04:16

Structure complexes: tableaux et objets
04:16

tuxie

¡Che, boludo! Me shamo Tuxie, tengo 7 años y soy un pingüino argentino. ¡No me pongan en el horno por favor!

Tuxie in the oven

Deux minutes plus tard

koi

Bonjour! Je m'appelle Koï et j'ai beaucoup de tâches à accomplir aujourd'hui

Painting of Tuxie the penguin

Quelques heures plus tard

Interlude: passage par référence ou valeur
04:16

Remark

Il y a une subtilité qu'il faut que pour compreniez avant de travailler avec les objets et les tableaux.

Question

Est-ce que a et b sont égaux (a === b)?

Question

Est-ce que a et b sont égaux (a === b)?

Syntaxe de décomposition (spread syntax)
04:16

Definition (Spread syntax)

...variable: étend un objet ou un tableau en plusieurs arguments

Example (Décomposition d'objets)

Example

Remark

La syntaxe de décomposition est utile pour déclencher le système de réactivité de Svelte.

Explication
04:16

Les arrays et les objets sont passés par référence. Une analogie utile serait de remarquer qu'on désigne parfois une maison par son adresse.

  • Changer la maison ne signifie pas forcément changer d'adresse.
    En particulier, Svelte ne réagira pas à de tels changements.

Exemple: la todo list
04:16

JSON
04:16

Definition

Le JSON est un format de texte léger qui permet l'échange de données entre client et serveur. Sa syntaxe ressemble aux listes et objets de JavaScript.

Fetch API
04:16

Definition

  • Commence le processus de recherche de resource sur un serveur
  • Retourne une promesse de réponse

Exemple: Photo de Pokémon
04:16

Résumé du chapitre
04:16

  • Composant nouvelle balise HTML qui contient du HTML, CSS et JavaScript, dont le but est de représenter un élément d'UI.
  • L'utilisation de composants permet la réutilisation, l'encapsulation et la composition.
  • Les composants sont créés de manière déclarative, un framework JavaScript (tel que React ou Svelte) s'occupe de gérer les mutations.
  • Les composants ont énormément amélioré l'expérience développeur (DX), ce qui a mené à une amélioration de l'UX.