0

I wanted to create an Automatic number incrementer that increments different numbers at different speed according to their size such that they all stops at same time

for example you can see here this is the desired output I am expecting how these different number stops at same time

I tried doing it using useEffect useState and setInterval but they all are stoping at a big gap

you can see my demo here

React Js code

import React from "react";
import classes from "./Numbers.module.css";

function Numbers() {
  const [counter, setCounter] = React.useState(0);
  React.useEffect(() => {
    const interval = setInterval(() => {
      if (counter < 1839) {
        setCounter(counter + 1);
      }
    }, 5);

    return () => {
      clearInterval(interval);
    };
  });
  const [counter1, setCounter1] = React.useState(0);
  React.useEffect(() => {
    const interval = setInterval(() => {
      if (counter1 < 512) {
        setCounter1(counter1 + 1);
      }
    }, 5);

    return () => {
      clearInterval(interval);
    };
  });
  const [counter2, setCounter2] = React.useState(0);
  React.useEffect(() => {
    const interval = setInterval(() => {
      if (counter2 < 729) {
        setCounter2(counter2 + 1);
      }
    }, 5);

    return () => {
      clearInterval(interval);
    };
  });
  const [counter3, setCounter3] = React.useState(0);
  React.useEffect(() => {
    const interval = setInterval(() => {
      if (counter3 < 2729) {
        setCounter3(counter3 + 1);
      }
    }, 5);

    return () => {
      clearInterval(interval);
    };
  });
  return (
    <div class={classes["number-section"]}>
      <h1 class={classes["Number-heading"]}>Numbers expose our character.</h1>
      <div class={classes["notes-books-pyq"]}>
        <div>
          <span class={`${classes["notes-number"]} ${classes["number"]}`}>
            {counter}+
          </span>
          <br />
          <h2 class={`${classes["notes-label"]} ${classes.label}`}>Notes</h2>
        </div>
        <div>
          <span class={`${classes["books-number"]} ${classes.number}`}>
            {counter1}+
          </span>
          <br />
          <h2 class={`${classes["books-label"]} ${classes.label}`}>Books</h2>
        </div>
        <div>
          <span class={`${classes["pyqs-number"]} ${classes.number}`}>
            {counter2}+
          </span>
          <br />
          <h2 class={`${classes["pyqs-label"]} ${classes.label}`}>PYQ's</h2>
        </div>
        <div>
          <span class={`${classes["downloads-number"]} ${classes.number}`}>
            {counter3}+
          </span>
          <br />
          <h2 class={`${classes["downloads-label"]} ${classes.label}`}>
            Download's
          </h2>
        </div>
      </div>
    </div>
  );
}
export default Numbers;

CSS Code

.number-section {
  background-color: #efeef9;
  padding: 4rem 6rem;
  border-radius: 2rem;
  width: 120rem;
  margin: 10rem auto;

  display: flex;
  justify-content: space-between;
  align-items: center;
}

.notes-books-pyq {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8.6rem;
}

.notes-books-pyq div {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: center;
}

.Number-heading {
  font-size: 3rem;
  color: #333;
}

.number {
  font-size: 4.4rem;
  color: #5236ff;
  font-weight: 600;
}

.label {
  font-size: 2rem;
  color: #333;
}
Shivam kaushal
  • 173
  • 1
  • 9
  • None of your `useEffect` hooks have a dependency array, so they are running their callbacks each and every render cycle. Think you could create a ***running*** [codesandbox](https://codesandbox.io/) demo of your code we could inspect live? – Drew Reese May 16 '23 at 08:00
  • @DrewReese you can see the demo here https://codesandbox.io/embed/dreamy-tereshkova-zbw23p?fontsize=14&hidenavigation=1&theme=dark – Shivam kaushal May 16 '23 at 08:07
  • @DrewReese yes thanks I searched for it but did't found it I searched for some wrong keyword I think Thanks – Shivam kaushal May 16 '23 at 08:19

0 Answers0