-1

Maybe I'm not quite comprehending React.. So I'm trying to increment and decrement numbers but when I console.log, I see one number less or more in the console. I'm assuming this is because number starts with 0. Is there way I could match what I'm pressing and what's on the console?

import { useState } from "react";

export default function Numbers() {
  const [number, setNumbers] = useState(0);

  const onClickIncrease = () => {
    console.log(number);
    // I have tried the following:
    // setNumbers(number + 1);
    setNumbers((prev) => prev + 1);
  };

  const onClickDecrease = () => {
    console.log(number);
    setNumbers((prev) => prev - 1);
  };

  return (
    <>
      <div onClick={onClickDecrease}>-</div>
      <div>{number}</div>
      <div onClick={onClickIncrease}>+</div>
    </>
  );
}
EIK
  • 11
  • 3

2 Answers2

0

EDIT: It has to do with react state being async, can check the link above.

---- IGNORE BELOW ----

const onClickIncrease = () => {
   console.log(number); // output will be 0
   setNumbers((prev) => prev + 1);
   console.log(number); // output will be 1
};

And yes, the number starts with 0 because the argument passed in useState is 0.

const [number, setNumbers] = useState(0);
0
import { useState } from "react";
 export default function Numbers() {
 const [number, setNumbers] = useState(0);  
  console.log(number);
return (
<>
  <div onClick={()=> setNumbers(number - 1)}>-</div>
  <div>{number}</div>
  <div onClick={()=> setNumbers(number + 1)}>+</div>
</>

); }