C'est une valeur sauvegardée dans un objet, dans ton composant qui persiste lorsque le composant se rerender
Quand elle est update, le composant ne se rerender pas
Son nom vient du fait que la valeur est sauvegardée dans un objet : { current: ... }
Son usage basique est pour récupérer la référence d'un élément HTML primitif, par exemple, une div :
Cet usage permet notamment :
* changer les propriétés d'une div
* récupérer la valeur d'un input
* gérer le canvas
Mais, c'est loin d'être le seul usage, on va aborder 3 usages ensemble :
1. garder des états qui ne changent pas les vues 2. garder des références d'objet comme setTimeout ou setInterval 3. Connaître le nombre de fois qu'un composant est rerender
Dans un hooks, j'ai besoin
* du point courant, pour dessiner le trait
* d'un tableau qui sauvegarde chaque "ligne" avec la couleur etc
* ainsi que l'historique des lignes supprimé pour gérer le undo / redo
J'utilise donc le hooks useRef
Pourquoi ?
Je n'ai pas envie de render mon composant quand je modifie les valeurs
J'ai envie que les valeurs persistent entre les render
Je ne veux pas stocker en global
2. garder des références d'objet comme setTimeout
Exemple :
Ce hooks permet d'appeler le callback après que le onDebouce n'est pas été appelé pendant 30 secondes depuis son dernier appel
Par exemple dans un search bar, pour faire une call api quand la personne arrête d'écrire
Ici j'ai besoin de stocker le setTimeout pour le clear et au cas où le hooks est destroy
Ce serait une erreur de le mettre dans un useState !
Car je ne veux pas rerendre ma vue car je change le handler
Je souhaite juste faire un call API, le useRef est donc parfaite pour ça !
3. Connaître le nombre de fois qu'un composant est rerender
Quand tu mets ce hooks dans ton composant, il va retourner une ref qui s'incrémente à chaque render, et donc compte les render.
J'utilise parfois pour debugger certaines choses
Le useRef est obligatoire pour faire ça
Un state est impossible ici, car si tu update un state dans un useEffect ça va créer une boucle infinie
✅ Deploy automagiquement React, Angular et Vue
✅ Très facile d'ajouter un nom de domaine custom
✅ Interface canon
✅ Gratuit avec infinité de projet
✅ Puissance de Next
❌ Que frontend
❌ Pas libre
✅ Deploy automatiquement Front et Backend (React, Rails, Django...)
✅ Liberté du serveur, CLI bash
✅ DB disponibe
❌ Interface moins sexy
❌ Très rapidement payant (les limites sont vite atteintes)
Déjà, il faut savoir que la technique c’est bien. Excellent. Mais, c'est 50% du travail de développeur, le mindset c’est l’autre partie !
Tu as bien lu. Pas besoin d’être une machine de guerre en dev si tu as le bon mindset 😶
C’est pour ça que je vais en parler sur ce compte👍
Tu te demandes peut-être : « c’est quand que je suis prêt pour travailler en entreprise ? »
Ma réponse est que si tu te poses cette question, c’est que le bon moment c’est maintenant, sur le champ 🏃 !
Mais, des personnes me diront « j’ai peur », « je n'ai pas confiance en moi »