3.4: Rendu déclaratif
Une grande différence entre Vue.js et ce qu'on a fait précédemment, est l'approche « déclarative ».
Approche classique:
Jusqu'à présent, on partait d'une page HTML et on la modifiait à partir du JS quand l'utilisateur interagissait (click, clavier, ...).
En pratique, une page HTML est généralement construite (par exemple en PHP) à partir de données.
Quand les interactions JS deviennent importantes, on se retrouve à reconstruire en JS une bonne partie du HTML à partir de données modifiées:
données => HTML <= modification des données et du HTML par JS
On construit donc le HTML de deux manières très différentes. Ça conduit à des incohérences. Par ailleurs, modifier du HTML en JS est beaucoup plus compliqué que d'écrire du HTML.
Approche déclarative:
Dans une approche déclarative, on décrit une seule fois comment construire le HTML à partir des données. Quand les données changent, la page se met à jour automatiquement. On a donc:
donnés => HTML
Prenons un exemple très très simple:
La donnée est « age », et on veut la faire passer de 25 à 26 quand l'utilisateur clique sur un bouton.
Approche classique, exemple:
PHP:
$age=25;
echo '<h1>Age: '.$age.'<h1>';
echo '<input type="button" value="bouton"/>';
Ensuite, en JS:
document.querySelector('input').addEventListener('click',()=>{
document.querySelector('h1').textContent='Age:'+26;
});
En JS, on a voulu changer l'age, on a donc du retrouver le h1 et le modifier. Ce code JS est compliqué par rapport à l'écriture du HTML.
Si les propriétaires veulent maintenant afficher « Mon age est: 25 » au lieu de « Age: 25 », le développeur va devoir changer à la fois le code PHP et le code JS. S'il oublie l'un où l'autre, ce sera incohérent.
Approche déclarative, exemple:
En Vue.js:
...
let age=ref(25);
function changer(){
age.value=26;
}
template:
<h1>Age: {{age}}</h1>
<input type="button" value="bouton" @click="changer"/>
Quand l'utilisateur clique sur le bouton, la fonction « changer » change uniquement la variable age. La page se met automatiquement à jour. Aucun besoin d'écrire du JS compliqué pour modifier le DOM. Si les propriétaires de la page veulent maintenant afficher « Mon age est: 25 » au lieu de « Age: 25 », le développeur va juste modifier le template, ce qui est relativement simple.
Conclusions:
- Avec Vue.js, dans la partie JS, on ne manipule en général pas le DOM. On se contente de modifier les données.
- Quand on modifie des données, Vue.js doit se rendre compte que ces données ont changé pour mettre à jour la page.
Les variables, comme « age » sont dites « réactives »: elles font réagir l'interface.