Créer une todo-list en React JS [Fin]

Dans la précédente partie nous avons vu la mise en place du projet liste des tâches, avec la réflexion (très rapide) avant projet mais aussi son initialisation..

Pour rappel :

Le concept : Je me pose en dĂ©fi de coder une application web en ReactJS dans la limite d’une heure. Je partirais gĂ©nĂ©ralement d’une base vierge et essayerait de me tenir aux objectifs que je me fixe en dĂ©but d’exercice .

Continuons maintenant !

⏳ [00:30] Mise en place de l’architecture en Composants

App.js Ă  [00:30]
Création (regardez les onglets) des composants et appel depuis App.js

Je commence par créer les composants :

  • Header : Qui va contenir la phrase de bienvenue et le champs d’ajout d’une tâche
  • List : Qui sera elle chargĂ©e d’afficher les tâches en cours et celles accomplies

Puis je les importe dans App.js.

Je pars sur une base très simple pour ces composants :

Base de code en mode export de composant pour List et Header

⏳ [00:33] Je passe App.js en composant également comme ceci :

App.js passé en React.Component
Je vous invite à regarder la différence avec son 1er état sur la 1ere photo

Les plus observateurs ont peut ĂŞtre remarquĂ© que j’utilisais les classes de Grid de Bootstrap, mais aussi que je l’importe dans App.js !

En effet je n’utilise plus Bootstrap pour ses styles mais pour de la production rapide j’aime utiliser leur système de grilles

Ainsi pour ne pas surcharger la solution avec du code inutilisĂ© j’utilise leur outil de customisation de paquet. En effet grâce Ă  Less, vous pouvez ainsi choisir ce que vous voulez ou non. Je me suis donc crĂ©e une version de bootstrap contenant seulement leur système de grilles

⏳ [00:35] Création des GET + POST vers le LocalStorage

Comme je disais dans le premier article, on ne se reposera pas sur une API pour cet exercice. Cependant comme vous pouvez voir sur l’image ci-après le fonctionnement pour le Front est globalement le mĂŞme, et on pour amĂ©liorer cette application on peut rapidement remplacer les mĂ©thodes localStorage.X() vers un fetch par exemple.

App.js avec les fonctions de Get et Post
Deux méthodes: une pour récupérer et une pour mettre à jour le localStorage (BDD)

Vous pouvez aussi remarquer que je lance dĂ©jĂ  un this.postaToDo({test: « test »}). C’est un test du bon fonctionnement et voici le rĂ©sultat :

Le localStorage sauvegarde notre valeur de test sous la clé "toDoList"
La data est tout simplement sauvegardĂ©e en LocalStorage sons format JSON. Cela va permettre Ă  l’utilisateur de retrouver ces tâches mĂŞme si il quitte la page.

⏳ [00:39] Je ne m’attarde pas plus lĂ  dessus mais je passe (en props) la data du state de App.js et la fonctions d’ajout, vers respectivement List et Header.

⏳ [00:41] Code du Header

Je commence Ă  mettre du contenu textuel dans le Header : une salutation, le logo en texte (que je repasserais plus tard dans App.js pour une question de style).

✍️ Je mets aussi en place le champs d’entrĂ©e que je rĂ©cupère depuis la doc de react-suite.

Voici le code avant que je remplace l’alert de test du bouton « Ajouter une tâche » par la fonction passĂ©e en props depuis App.js

Code de Header
Code de Header Ă  [00:44]

⏳ [00:45] Code de List

Il ne reste plus que 15 minutes au chrono, il faut s’activer maintenant pour gĂ©rer la fonctionnalitĂ© indissociable, l’affichage de la liste des tâches !

A ce moment lĂ  je m’occupe de deux parties prĂ©liminaires : rĂ©cupĂ©rer le modèle de liste depuis la doc de react-swipeable-view

(pour rappel on veut pouvoir gĂ©rer l’Ă©tat d’une tâche en la faisant slider Ă  gauche ou Ă  droite)

mais aussi crĂ©er un loading pendant que l’application rĂ©cupère les tâches en cours !

(MĂŞme en localStorage il y a un minime dĂ©lais, pensez-y si vous ne voulez pas voir une console pleine d’erreurs ????)

Voici ce que ça donne :

Démonstration du loader
Rien de sexy pour le moment mais vu le chrono on se concentre sur l’essentiel !

Et voila le code :

Code du loader
On vérifie si les résultats sont en train de charger, sinon on vérifie aussi si la liste est vide : dans ce cas on affiche un message adapté.

⌛️ [00:59] Fin de la liste et du chrono.. ????

Et voilĂ  nous arrivons dĂ©jĂ  Ă  la fin du chrono, sur les dernières minutes j’ai pu finir de mettre en place l’affichage de la liste pour les tâches en cours.

Voici le résultat final au chrono :

Démo de l'appli à fin de chrono
Ajout et affichage des tâches

Malheureusement je manque de temps pour finir correctement toutes les fonctionnalitĂ©s… ????

Mais vu qu’on est sur mon blog et surtout que c’est la première Ă©dition de ce format ????, je me permets d’amĂ©liorer le rĂ©sultat pendant qqs dizaines de minutes supplĂ©mentaires….

⌛️ [01:23] Fin non officielle

Démo finalisée (temps dépassé)

Voici ce que ça donne ! ????????

Mieux non ?

Sur les dernières Ă©tapes j’ai ajoutĂ© les fonctions sur les Ă©lĂ©ments de la liste pour dĂ©finir l’action Ă  effectuer en cas de slide sur suppression ou sur archivage. J’ai amĂ©liorĂ© le design global en allant notamment sur Illustrator pour sortir un petit sourire Ă  la Amazon afin de crĂ©er un visage mignon avec le logo et rendre ça plus sympa !

Enfin j’ai amĂ©liorĂ© l’Ă©cran affichĂ© en cas oĂą aucune tâche n’est en cours comme vous pouvez le voir au-dessus.

Voilà que se termine la première édition du format #1hChrono ! ????

J’ai rĂ©ussi Ă  rĂ©aliser (pour ce dĂ©lais imparti) une application pas piquĂ©e des hannetons ????. Cependant beaucoup de choses Ă  apprendre du dĂ©passement du temps imparti ! En effet j’ai passĂ© beaucoup de temps Ă  choisir les modules, faire un schĂ©ma, l’initialisation… Comme je disais et je pense ĂŞtre dans le vrai en persistant sur l’importance d’une bonne base avant de se lancer dans le code. ????

????‍♂️ Néanmoins je pense pouvoir gagner quelques minutes dans le futur en prenant des décisions plus rapidement et en augmentant globalement ma productivité sur ces étapes.

✍️ Question format : J’ai remarquĂ© que j’ai peut ĂŞtre mal dosĂ© les deux parties d’article, il y avait beaucoup de choses Ă  montrer dans cet Ă©pisode final et ça impacte la longueur.

???? Je vais donc travailler ces points pour le prochain #1hChrono !

Je vous souhaite d’ici lĂ  une bonne semaine de code (as-t-on mieux Ă  faire en ce moment ?) et vous dit Ă  bientĂ´t sur ReactHeure.fr !

N’oubliez pas de prendre soin de vous et de vos proches !