let updateTimer: number;
export function Timer() {
const [count, setCount] = React.useState<number>(0);
const [messages, setMessages] = React.useState<string[]>([]);
const start = () => {
updateTimer = setInterval(() => {
const m = [...messages];
m.push("called");
setMessages(m);
setCount(count + 1);
}, 1000);
};
const stop = () => {
clearInterval(updateTimer);
};
return (
<>
<div>{count}</div>
<button onClick={start}>Start</button>
<button onClick={stop}>Stop</button>
{messages.map((message, i) => (
<p key={i}>{message}</p>
))}
</>
);
}
Run Code Online (Sandbox Code Playgroud)
代码示例:https : //codesandbox.io/s/romantic-wing-9yxw8?file=/ src/ App.tsx
该代码有两个按钮 - 开始和停止。
开始调用 asetInterval并保存间隔 ID。定时器设置为 …