javascript - 如何使用单个 useState 钩子实现反应倒计时?
问题描述
我正在尝试以 00:00 的格式进行倒计时。
我可以使用两个 useState 来实现它,但是我想使用单个 useState 来实现它
const [counter, setCounter] = React.useState([12, 0]);
React.useEffect(() => {
const timer =
counter > 0 &&
setInterval(() => {
setCounter([counter[0] - 1,Math.floor((counter[1] % 3600) / 60)]);
}, 1000);
return () => clearInterval(timer);
}, [counter]);
解决方案
您应该将计数器存储为秒/分钟。当您渲染它时,您可以使用以下方式将其转换为例如 MM:SS 格式:
function secondsToMMSS(seconds) {
var m = Math.floor(seconds / 60);
var s = seconds % 60;
return (m < 10 ? '0' : '') + m + ":" + ('0' + s).slice(-2);
}
推荐阅读
- jwt - AWS Cognito:无效的令牌签名,无法匹配密钥列表中所需的密钥标识符
- jquery - 发送双击到 Internet Explorer
- python - Pandas .. 分位数函数是否需要排序数据来计算百分位数?
- c# - AB 条码扫描系统 -- Code39 符号系统选项
- javascript - 具有 1000 多行的网格视图的切换/取消切换行的性能问题
- ios - 添加文本字段时无法使用锚激活约束
- vba - How to determine what is causing catastrophic error
- node.js - Google Vision API Text Detection with Node.js set Language hint
- sql - Orace SQL Case WHEN 语句“缺少关键字”
- r - 如何在多个数据帧上运行相同的代码?