【发布时间】:2019-12-12 20:57:03
【问题描述】:
我正在尝试用反应做倒数计时器。它基本上是从 10 到 0 的倒计时,当 0 时我会调用一些函数。
我为我找到了一些理想的例子:https://codesandbox.io/s/0q453m77nw?from-embed 但它是一个类组件,我不想用功能组件和钩子来做,但我不能。
我试过了:
function App() {
const [seconds, setSeconds] = useState(10);
useEffect(() => {
setSeconds(setInterval(seconds, 1000));
}, []);
useEffect(() => {
tick();
});
function tick() {
if (seconds > 0) {
setSeconds(seconds - 1)
} else {
clearInterval(seconds);
}
}
return (
<div className="App">
<div
{seconds}
</div>
</div>
);
}
export default App;
它从 10 倒计时到 0 非常快,而不是 10 秒。 我哪里错了?
【问题讨论】:
-
为什么要使用钩子?这基本上和常规组件一样多的代码。
-
@Mike'Pomax'Kamermans 虽然代码量大致相同(至少在当前设置中),但还有其他原因更喜欢函数式组件而不是类组件。函数式组件通常更容易阅读、更容易测试,而且 React 团队声称在未来的 React 版本中可能会有性能激励。
标签: javascript reactjs react-hooks countdown