Alors que l’on entend énormément parlé de SPA et du « tout JS », on peut penser que ReactJS vient remplir cette mission de pouvoir faire une application totalement avec cette librairie. Je ne peux pas vous dire non car ce serait faux, et je ne peux pas vous dire de ne pas le faire car il peut y avoir un intérêt. Mais, voici mon retour d’expérience.
L’avantage de ReactJS est de pouvoir se comporter en plusieurs modules et nous pouvons en charger plusieurs sur une seule et même page sans pour autant être dans une SPA.
Typiquement, cela se révèle très pratique pour faire de l’amélioration sur une application Legacy qui souhaite passer sur un frontend avec un maximum de Javascript. De fait, on peut préparer le terrain plutôt que d’entamer un chantier longue durée qui demanderait de faire table rase de l’existant. Nous sommes donc dans un cas où il est intéressant de créer différents modules qui, plus tard, pourront être réutilisés lorsque vous souhaiterez avoir un frontend totalement en Javascript.
Inversement, quand on démarre une application de zéro, on aurait tendance à se dire que l’on peut donc tout à fait démarrer tout le frontend en ReactJS. Oui mais ! Le seul bémol que j’aimerais soulever concerne react-router qui permet de faire rentrer, à mon sens, ReactJS en tant que « framework » et non pas qu’une simple librairie. Cela va vous permettre de gérer votre routing comme une SPA.
Pour avoir tenté de l’utiliser dans différents projets, je n’ai pas été très fan de l’approche car j’ai eu l’impression de complexifier énormément mon application frontend pour finalement… « pas grand chose ».
Typiquement aujourd’hui, je préfère beaucoup plus travailler sur une application isomorphe avec un backend qui s’occupera de mon routing comme, par exemple, avec l’utilisation de NextJS dont je suis particulièrement fan. Je n’ai donc plus véritablement besoin d’utiliser react-router et cela me convient parfaitement. J’ai donc au final, une application complète en ReactJS sans avoir à me soucier du routing côté frontend comme j’avais pu le faire avec react-router.