Le problème
Je vais expliquer mon cas d’utilisation. Un composant PostList
sur une application de forum avait besoin d’être utilisé selon deux scénarios :
- l’un avait besoin que les messages soient classés dans l’ordre croissant,
- l’autre avait besoin du contraire.
En travaillant sur ce composant, j’ai déclaré mes props de cette façon :
|
|
Ensuite, j’ai utilisé une computed
pour ordonner les posts selon les besoins :
|
|
Lorsque j’ai testé ce code, l’ajout d’un nouveau message a fonctionné, mais il ne s’est pas affiché dans la liste.
En utilisant Vue DevTools, j’ai vu l’état de Pinia se mettre à jour et le composant parent du composant PostList
a bien fourni la liste complète…
La raison et solution
Pourquoi le nouveau message n’apparaîssait-il pas ?
La déstructuration de l’objet props avait brisé la réactivité et computed
nécessite une dépendance réactive pour se mettre à jour !
Le code est donc devenu :
|
|
Utilisation de toRefs
Si vous insistez à déstructurer vos props, assurez-vous de les rendre réactives.
Pour cela, Vue fournit un utilitaire pour l’occasion :toRefs
.
Le code se présente comme suit :
|
|
La déstructuration se révèle très utile, mais avec Vue, il faut l’utiliser avec précaution, en particulier si vous utilisez des computed
🙂. Merci, toRefs
!
Crédit : Photo de Scott McNiel sur Pexels.