Me estoy quemando aquí, así que puede que me esté perdiendo algo, ¿por qué no sigue los parámetros?
const addItem = () => { const newValue = setCounter(counter +1); if (newValue < {stock}){ setCounter(newValue) } else if (newValue > {stock}) { alert("Stock is full"); setCounter({stock}) } } const quitItem = () => { const newValue = setCounter(counter -1) if (newValue < initial){ setCounter(initial) } }Cada vez que llama a setCounter, en realidad está actualizando su valor en el estado React. Entonces, en la primera línea dentro de addItem , ya ha actualizado el valor del contador.
Lo siguiente es que dentro addItem está comparando newValue con un objeto con la variable stock . Probablemente debería comparar el valor con el valor de stock , no con un objeto que contenga stock .
Prueba esto:
const addItem = () => { const newValue = counter + 1; if (newValue < stock){ setCounter(newValue) } else if (newValue > stock) { alert("Stock is full"); setCounter(stock) } } const quitItem = () => { const newValue = counter -1 if (newValue < initial){ setCounter(initial) } }