Next.js Discord

Discord Forum

trying to create a clock in nextjs , silly code is not working

Unanswered
Blanc de Hotot posted this in #help-forum
Open in Discord
Blanc de HototOP
i'm using client side component but still facing same

38 Replies

@Blanc de Hotot i'm using client side component but still facing same
does it work in normal react project?
Blanc de HototOP
didn't tried
i have set sec and min as dependency, now it working
but i'm not able to understaand
@Blanc de Hotot i'm using client side component but still facing same
i think the if logic shouldn't be in the setInterval
it should be in a different useeffect
maybe the if logic inside your useEffect [] is only capturing the hr, min and sec at initial, as closures.
Blanc de HototOP
ohh yes yes
i have decalred , these with let
might be it is locally avaiable
never used let for usestate before :/ always used const for usestate :/
Blanc de HototOP
but value will be changed
new reference will be created
but it is working:blob_thonkang:
well
i think you still need to separate the useeffect
i dont think setInterval everytime the sec/min value changed is a good idea 🫠
so only at the first
Blanc de HototOP
so what i can do ,
should i go with two effects
yeah
so that the setInterval SHOULD be created once....
at component mount
Blanc de HototOP
how to distribute code , for two effects
need hint
next time send the code using code block please
```ts
paste code here
```
Blanc de HototOP
const [hr, setHr] = useState(0);
const [min, setMin] = useState(0);
const [sec, setSec] = useState(0);

let listRef = useRef(0);

useEffect(() => {
const interval = setInterval(() => {
if (sec < 59) {
setSec(prevSec => prevSec + 1);
} else if (sec == 59 && min < 59) {
setSec(0);
setMin(prevMin => prevMin + 1);
} else if (sec === 59 && min === 59) {
setSec(0);
setMin(0);
setHr(prevHr => prevHr + 1);
}
}, 1000);

return () => {
clearInterval(interval);
};
}, [sec, min]);
try again
Blanc de HototOP
const [hr, setHr] = useState(0);
const [min, setMin] = useState(0);
const [sec, setSec] = useState(0);

let listRef = useRef(0);

useEffect(() => {
const interval = setInterval(() => {
if (sec < 59) {
setSec(prevSec => prevSec + 1);
} else if (sec == 59 && min < 59) {
setSec(0);
setMin(prevMin => prevMin + 1);
} else if (sec === 59 && min === 59) {
setSec(0);
setMin(0);
setHr(prevHr => prevHr + 1);
}
}, 1000);

return () => {
clearInterval(interval);
};
}, [sec, min]);
use the code block xD
use this format
```ts
paste code here
```
Blanc de HototOP
js  const [hr, setHr] = useState(0);
  const [min, setMin] = useState(0);
  const [sec, setSec] = useState(0);

  let listRef = useRef(0);

  useEffect(() => {
    const interval = setInterval(() => {
      if (sec < 59) {
        setSec(prevSec => prevSec + 1);
      } else if (sec == 59 && min < 59) {
        setSec(0);
        setMin(prevMin => prevMin + 1);
      } else if (sec === 59 && min === 59) {
        setSec(0);
        setMin(0);
        setHr(prevHr => prevHr + 1);
      }
    }, 1000);

    return () => {
      clearInterval(interval);
    };
  }, [sec, min]); 
thats better
Blanc de HototOP
i'm new to discord , so :mild_panic:
  useEffect(() => {
    // this wil be run at the first time
    const interval = setInterval(() => {
      setSec(prev => prev + 1)
    }, 1000);

    return () => {
      // this will be run when component dissapear
      clearInterval(interval);
    };
  }, []); 

  useEffect(()=>{
    // this will be called everytime sec state is changed
    if(sec > 59) {
      // what happen if sec value goes over 59
    }
  },[sec])

  useEffect(()=>{
    // this will be called everytime min state is changed
    if(min > 59) {
      // what happen if min value goes over 59
    }
  },[min])
here is the hint sir
Blanc de HototOP
thanks bro