Faut-il développer une SPA ou plusieurs modules ReactJS ?

Après plus de deux ans d’expérience avec ReactJS, c’est une question qui mérite d’être posé.

Alors que l’on entend énormément parlé de SPA (Single Page Application) 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éutiliser 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 comme une simple librairie. Cela va vous permet donc de gérer votre routing.

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 » (toute proportion gardée … !).

Typiquement aujourd’hui, je préfère beaucoup plus travailler sur une application isomorphe avec un côté serveur 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.

Au final, je peux produire une application complète en ReactJS sans avoir à me soucier du routing côté frontend comme j’avais pu le faire avec react-router.