From 4f0f43719dcbff2326754586e1f7e0f837835c44 Mon Sep 17 00:00:00 2001
From: Jean-Christophe <>
Date: Thu, 25 Jan 2024 12:46:55 +0100
Subject: [PATCH] userRef pour timer

---
 README.md                           |  3 +++
 src/components/person.component.jsx | 33 +++++++++++++++++------------
 2 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index 571224a..0e4d7d0 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,10 @@ où `tag` peut prendre comme valeur :
   voir `/src/components/personListing.component.jsx` ainsi que  `/src/components/person.component.jsx` 
 * `v 5.6` : utilisation des dépendances du hook `useEffect` pour déclencher son effet  
   voir `/src/components/person.component.jsx` 
+* `v5.7` : utilisation du hook `useRef`  et complément dépendances de `useEffect`  
+  voir `/src/components/person.component.jsx` 
 
+  
 Faire ```git checkout main``` pour revenir à la version finale.
 
 
diff --git a/src/components/person.component.jsx b/src/components/person.component.jsx
index a8771be..0a133e6 100644
--- a/src/components/person.component.jsx
+++ b/src/components/person.component.jsx
@@ -1,22 +1,27 @@
-import { useState, useEffect } from 'react';
+import { useState, useEffect, useRef } from 'react';
 
 import '../assets/style/person.css';
 
 const Person = ( { name = 'Anonymous', age, started, delay } ) => {
    
-   const [ currentAge, setCurrentAge ] = useState(age);
-   
-   useEffect( () => {
-         if (started) {
-            setInterval( () => setCurrentAge( previousCurrentAge => previousCurrentAge + 1 ), delay);
-         }
-      }, [started] );
+const [ currentAge, setCurrentAge ] = useState(age);
+const timer = useRef( undefined );
+
+useEffect( () => {
+      clearInterval( timer.current );
+      if (started) {
+         timer.current = setInterval( () => { 
+                                             setCurrentAge( previousCurrentAge => previousCurrentAge + 1 );
+                                             console.log('timer is running');
+                                       }, delay);
+      }
+   }, [started, delay] );
 
-   return (
-      <div className="person">Here is :
-         <div>name : <span>{ name }</span> </div>
-         <div>age  : <span>{ currentAge } </span>  </div>
-      </div>
-   );
+return (
+   <div className="person">Here is :
+      <div>name : <span>{ name }</span> </div>
+      <div>age  : <span>{ currentAge } </span>  </div>
+   </div>
+);
 }
 export default Person;
-- 
GitLab