gpt4 book ai didi

javascript - 使用 React Hooks 的倒数计时器

转载 作者:行者123 更新时间:2023-12-05 08:50:22 25 4
gpt4 key购买 nike

所以定时器工作了。如果我用特定的倒计时数字对 this.state 进行硬编码,则计时器会在页面加载后开始倒计时。我希望时钟在单击按钮时开始倒计时,并具有将 statenull 更改为随机生成的数字的功能。我对 React 有点陌生。我知道 useState() 只设置初始值,但如果我使用点击事件,我该如何重置 useState()?我一直在尝试使用 setCountdown(ranNum) 但它使我的应用程序崩溃。我确信答案很明显,但我只是没有找到。

如果我没有提供足够的代码,请告诉我。我不想发布整个 shebang。

这是我的代码:

import React, { useState, useEffect } from 'react';

export const Timer = ({ranNum, timerComplete}) => {
const [ countDown, setCountdown ] = useState(ranNum)
useEffect(() => {
setTimeout(() => {
countDown - 1 < 0 ? timerComplete() : setCountdown(countDown - 1)
}, 1000)
}, [countDown, timerComplete])
return ( <p >Countdown: <span>{ countDown }</span> </p> )
}


  handleClick(){
let newRanNum = Math.floor(Math.random() * 20);
this.generateStateInputs(newRanNum)
let current = this.state.currentImg;
let next = ++current % images.length;
this.setState({
currentImg: next,
ranNum: newRanNum
})
}

<Timer ranNum={this.state.ranNum} timerComplete={() => this.handleComplete()} />
<Button onClick={this.handleClick} name='Generate Inputs' />
<DisplayCount name='Word Count: ' count={this.state.ranNum} />

最佳答案

您应该将 countDown 存储在父组件中并将其传递给子组件。在父组件中,您应该使用一个变量来触发何时启动Timer。你可以试试这个:

import React from "react";

export default function Timer() {
const [initialTime, setInitialTime] = React.useState(0);
const [startTimer, setStartTimer] = React.useState(false);

const handleOnClick = () => {
setInitialTime(5);
setStartTimer(true);
};

React.useEffect(() => {
if (initialTime > 0) {
setTimeout(() => {
console.log("startTime, ", initialTime);
setInitialTime(initialTime - 1);
}, 1000);
}

if (initialTime === 0 && startTimer) {
console.log("done");
setStartTimer(false);
}
}, [initialTime, startTimer]);

return (
<div>
<buttononClick={handleOnClick}>
Start
</button>
<Timer initialTime={initialTime} />
</div>
);
}

const Timer = ({ initialTime }) => {
return <div>CountDown: {initialTime}</div>;
};

关于javascript - 使用 React Hooks 的倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62294102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com