Ниже приведен эксперимент с использованием useState()
. Он работает нормально, кроме случаев, когда нажата кнопка +
, тогда число может меняться от 7001
и 7000
, а затем быстро мигать между некоторыми числами.
На самом деле, без нажатия на +
, число вело себя хорошо, но примерно до 8000 или 9000, тогда оно может начать набирать sh между некоторыми числами. Почему это так и как это можно исправить?
PS Первоначальный отладочный вывод заключался в следующем: кажется, Counter()
вызывался несколько раз, каждый раз устанавливая таймер интервала. Таким образом, «магическим образом» кажется, что useState()
запускался только один раз - по неизвестной и магической причине - или, может быть, он запускался более одного раза, но каждый раз возвращал одно и то же содержимое для какого-то магического механизма. Начальное значение 0
действительно было таким впервые. Когда это было useState(0)
для будущих времен, count
не было 0
... мы бы этого не хотели, но тогда это было не так функционально (как в математической функции).
function Counter() {
const [count, setCount] = React.useState(0);
setInterval(() => {
setCount(count + 1000);
}, 1000);
return (
<div>
<button onClick={() => setCount(count + 1)}> + </button>
{ count }
<button onClick={() => setCount(count - 1)}> - </button>
</div>
);
}
ReactDOM.render(<Counter />, document.querySelector("#root"));
button { margin: 0 1em }
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<div id="root"></div>