У меня возникают проблемы с установкой состояния, созданного с помощью ловушки useState из асинхронных функций.
Я создал код, чтобы продемонстрировать: https://codepen.io/james-ohalloran/pen/ZdNwWQ
const Counter = () => {
const [count, setCount] = useState(0);
const increase = () => {
setTimeout(() => {
setCount(count + 1);
},1000);
}
const decrease = () => {
setTimeout(() => {
setCount(count - 1);
},1000)
};
return (
<div className="wrapper">
<button onClick={decrease}>-</button>
<span className="count">{count}</span>
<button onClick={increase}>+</button>
</div>
);
};
В приведенном выше примере, если вы нажмете «увеличить», а затем «уменьшить» ... вы получите -1 (я ожидал, что это будет 0). Если бы это был класс React, а не функциональный компонент, я бы предположил, что решением было бы использовать bind(this)
в функции, но я не ожидал, что это будет проблемой со стрелочными функциями.