Este fragmento de código funciona bien e incrementa el conteo cada segundo.
import React, { useEffect, useState } from 'react' function IntervalHookCounter() { const [count, setCount] = useState(0) const tick = () => { console.log("Called tick") setCount(prevCount => prevCount+1) } useEffect(() => { const interval = setInterval(tick, 1000) return () => { clearInterval(interval) } }, []) return ( <div> <h1>{count}</h1> </div> ) } export default IntervalHookCounterPero este fragmento de código solo sube 1 conteo y luego se detiene
import React, { useEffect, useState } from 'react' function IntervalHookCounter() { const [count, setCount] = useState(0) const tick = () => { console.log("Called tick") setCount(count+1) } useEffect(() => { const interval = setInterval(tick, 1000) return () => { clearInterval(interval) } }, []) return ( <div> <h1>{count}</h1> </div> ) } export default IntervalHookCounterCualquier idea de por qué esto podría ser el caso. Por favor, ayuda, esto se está volviendo muy confuso.
El primer bloque de código : utiliza el previous state para incrementar el count , es decir, toma el valor anterior e incrementa en 1. El estado anterior se actualiza en la devolución de llamada
En su segundo bloque de código , - setCount(count+1) no tiene acceso al nuevo valor de count en el procesamiento posterior porque useEffect() no se invoca la segunda vez. count siempre tiene el valor de 0 dentro de la devolución de llamada setInterval, ( 0 es el estado default )
Esta línea te jode: setCount(count+1)
porque el count es constante desde el alcance externo y siempre es 0 (incluso si se le let nunca reasignarlo), por lo que efectivamente termina siempre con 0+1 en el segundo ejemplo
¡salud!
esto tiene que ver con los cierres.
En resumen, el primer tick asegúrese de que agreguemos 1 al estado anterior cada segundo.
el segundo suma 1 para contar y para la función tic la cuenta siempre es 0 (el primer valor de la cuenta) por lo que la función se dispara cada segundo pero count + 1 siempre es 1 porque la cuenta siempre es 0 para la función tic