const [value, setValue] = useState(0); const counter = () => { setTimeout(() => { // setValue(value + 1); setValue((prevState) => prevState + 1); }, 2000); }; el counter se llama cuando se presiona un botón, es decir
<button onClick={counter}>counter</button> ¿Por qué setValue(value + 1) actualiza el valor una vez si presiono el botón varias veces, pero setValue((prevState) => prevState + 1) devuelve el valor correcto relativo a la cantidad presionada?
Las actualizaciones de estado no siempre son inmediatas. El uso del valor anterior garantiza que está trabajando con el valor actual en el momento en que se establece el valor. Kent Dodds lo explica muy bien en este post . Una pregunta más importante podría ser, ¿por qué estás envolviendo esto en un setTimeout ?