Pourquoi ne pas utiliser React JS pour des projets frontaux interactifs complexes ?

React est un excellent outil pour les sites web interactifs simples. Mais dans quelle mesure est-il applicable aux projets frontaux complexes ? Analyse des 4 problemes majeurs et des alternatives possibles.
Sommaire
  1. Points cles de l'analyse
  2. Probleme 1 : composants difficiles a reutiliser
  3. Probleme 2 : DOM virtuel lent et imprecis
  4. Probleme 3 : templates HTML incomplets
  5. Probleme 4 : programmation asynchrone complexe
  6. Les alternatives a React
  7. Conclusion

React est un excellent outil pour mettre en oeuvre des sites web interactifs simples. Mais dans quelle mesure est-il applicable aux projets frontaux complexes ? Est-ce que cela fonctionne aussi bien dans ce contexte ? Dans cet article, nous allons examiner certains des problemes que vous pouvez rencontrer lors de l'utilisation de React pendant le developpement web.

Logo React JS avec composants et architecture frontend

1. Points cles de l'analyse

Avant d'entrer dans le detail, voici les quatre problemes principaux identifies avec React dans les projets complexes :

Pour beaucoup, le framework React semble plus simple et plus convivial qu'AngularJS. L'une de ses fonctions les plus utiles est la liaison de donnees qui permet d'associer des sources de donnees a des elements de pages web. Si vous experimentez TodoMVC, vous constaterez qu'une application dans le cadre Binding.scala ne contient que 154 lignes de code, contre 488 lignes dans React. Pour approfondir vos connaissances en JavaScript, consultez nos 10 conseils pour apprendre le JavaScript.

2. Probleme 1 : composants difficiles a reutiliser

L'unite minimale de reutilisation dans React est le composant (React.Component). Il est plus leger que le controleur et la vue dans AngularJS. Tout ce qu'un developpeur web doit faire, c'est mettre en oeuvre une fonction de rendu qui traduit les proprietes (props) et l'etat du composant en elements HTML.

Ce composant leger est tres utile pour creer des pages web simples. Toutefois, lorsque la communication entre les composants est necessaire, le passage de fonctions de rappel (callbacks) est inevitable. En particulier pour les pages web aux structures complexes, des dizaines de composants interdependants doivent etre utilises, ou les rappels sont transmis de parent a enfant, de couche en couche.

La seule consequence de la mise en oeuvre des frameworks React dans ce type de projets web complexes et interactifs est que le code deviendra trop encombre et difficile a maintenir. Cette cascade de callbacks rend le debogage particulierement penible et le refactoring risque.

3. Probleme 2 : le DOM virtuel est lent et imprecis

Code source sur un ecran illustrant le developpement frontend avec React

L'algorithme de rendu dans React utilise le DOM virtuel. Le developpeur doit fournir une fonction de rendu qui cree un DOM virtuel en utilisant les proprietes et l'etat du composant. React construit ensuite le DOM reel sur la base de ce DOM virtuel.

Lorsque l'etat change, React appelle a nouveau la fonction de rendu et construit un nouveau DOM virtuel. Il analyse ensuite les differences entre l'ancienne et la nouvelle version du DOM virtuel et les applique au DOM reel. Ce procede presente deux inconvenients majeurs :

Les developpeurs web sont obliges d'utiliser la propriete key, ainsi que les methodes shouldComponentUpdate et componentWillUpdate, pour aider le framework a deviner correctement les changements survenus.

4. Probleme 3 : templates HTML incomplets et limites

React prend en charge JSX pour le developpement de modeles HTML. En theorie, les developpeurs frontaux peuvent transformer du HTML statique en page web dynamique en copiant simplement le HTML dans des fichiers JSX et en ajoutant un peu de code supplementaire.

Malheureusement, le support HTML de React est incomplet. Le developpeur doit remplacer manuellement class par className et for par htmlFor. La syntaxe des styles en ligne doit passer de CSS a JSON. De plus, React fournit un mecanisme propTypes pour verifier la validite des donnees, mais ce mecanisme ne trouve les erreurs qu'au moment de l'execution, et non au moment de la compilation.

React est egalement incapable de trouver les erreurs dans les noms. Par exemple, si vous ecrivez onclick au lieu de onClick, il n'y aura pas de message d'erreur, mais le programme se plantera. Pour mieux comprendre les langages qui sous-tendent ces frameworks, consultez notre article sur les langages de programmation les plus demandes.

5. Probleme 4 : programmation asynchrone complexe

Code informatique sur ecran sombre illustrant la complexite de la programmation asynchrone

Considerez le travail de React avec le serveur en termes de schema Modele-Vue-Vue-Modele. Un developpeur web doit mettre en oeuvre une couche d'acces a la base de donnees (Model), un etat en tant que ViewModel et une fonction de rendu en tant que View.

Le modele donne acces a l'API dorsale et definit l'etat (ViewModel) a l'aide de promesses (Promise et fetch API). Au cours de ce processus, les programmeurs frontaux doivent developper une procedure asynchrone composee d'un tableau de fermetures. Le code d'une telle procedure devient inevitablement confus et source d'erreurs.

Meme si vous faites tres attention a garder la trace de toutes sortes d'evenements asynchrones, le processus de debogage et de maintenance d'un tel programme devient extremement difficile. C'est un defi particulier pour les equipes qui travaillent sur des projets de grande envergure. Pour des ressources supplementaires sur le developpement web, consultez codeyourweb.org.

6. Les alternatives a React pour les projets complexes

Binding.scala semble similaire a React a certains egards, mais le mecanisme sous-jacent est completement different. Il est plus simple et plus polyvalent, offrant une flexibilite et une puissance superieures pour les projets complexes.

D'autres alternatives meritent egalement d'etre considerees :

7. Conclusion

En plus des quatre aspects mentionnes ci-dessus, il y a egalement le probleme de la gestion de l'etat dans React. Si vous utilisez une bibliotheque tierce comme Redux pour gerer l'etat, la structure de l'application devient encore plus confuse et le nombre de couches augmente.

React reste un outil puissant pour de nombreux cas d'utilisation, mais il est important de connaitre ses limites avant de l'adopter pour un projet complexe. Le choix du framework doit se faire en fonction des besoins specifiques du projet, de la taille de l'equipe et des contraintes techniques.

Questions frequentes

Quels sont les principaux problemes de React pour les projets complexes ?

Les 4 problemes majeurs sont : la difficulte de reutilisation des composants dans des projets complexes, la lenteur et l'imprecision du DOM virtuel, l'incompletude des templates HTML JSX, et la complexite de la programmation asynchrone pour la communication serveur.

Quelle est l'alternative a React pour les projets frontaux complexes ?

Binding.scala est presentee comme une alternative qui resout certains problemes de React. D'autres frameworks comme Vue.js, Svelte ou Angular peuvent egalement etre envisages selon les besoins specifiques du projet.

Le DOM virtuel de React est-il vraiment lent ?

Le DOM virtuel de React peut devenir lent dans les projets complexes car il regenere un DOM virtuel complet a chaque changement d'etat, puis compare les deux versions. Les developpeurs doivent utiliser des optimisations comme shouldComponentUpdate et la propriete key pour ameliorer les performances.