下面是一个使用useState()
. 它工作正常,除非+
单击按钮,然后数字可以交替出现7001
,7000
然后在一些数字之间快速闪烁。
实际上,在不点击 的情况下+
,该数字表现良好,但最高可达 8000 或 9000 左右,然后它可能会开始在某些数字之间闪烁。为什么会这样,如何解决?
PS初步调试发现是:好像Counter()
被调用了多次,每次都设置了一个Interval Timer。所以“神奇地”,似乎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>