javascript - React App - 为什么当小时数为零时 m 倒计时显示一个点?而我的分钟不是 00 时通过 59
问题描述
const [time, setTime] = useState(60 * 60)
const hour = time / 3600
let minutes = Math.floor(time / 60)
const seconds = time % 60;
const [hourLeft, hourRight] = String(hour).padStart(2, 0).split('')
const [minuteLeft, minuteRight] = String(minutes).padStart(2, 0).split('')
const [secondLeft, secondRight] = String(seconds).padStart(2, 0).split('')
useEffect(() => {
if(time > 0){
const timer = setTimeout(() => {
setTime(time - 1)
}, 1000)
}
}, [time])
解决方案
像这样将数字分成左右部分确实是一种奇怪的方法。您的代码包含很多错误。
首先,你有
hour = time / 3600
您没有四舍五入,因此hour
始终是 0 和 1 之间的小数。因此,如果您有 0.972222,那么您将分解该数字的数字,就好像它们是字符串一样,所以前两个将分别是0
和.
.
你需要做的是得到floor
这个数字。那么之后的所有其他计算也是不正确的。这就是你应该这样做的方式:
const hour = Math.floor(time / 3600);
const minutes = Math.floor(time % 3600 / 60);
const seconds = Math.floor(time % 60);
然后忘记你疯狂的数字,就像字符串一样,用零填充它们。您实际上可以一步完成所有操作:
const hour = String(Math.floor(time / 3600)).padStart(2, 0);
const minutes = String(Math.floor(time % 3600 / 60)).padStart(2, 0);
const seconds = String(Math.floor(time % 60)).padStart(2, 0);
然后只显示这些值:
return (
<>
{hour}:{minutes}:{seconds}
</>
);
或者,如果您想将它们分解为单个字符以显示背景颜色,您可以这样做:
const timeStr = hour + ':' + minutes + ':' + seconds;
return (
<>
{timeStr.split('').map((char, index) => {
return <span key={index}>{char}</span>
})}
</>
);
推荐阅读
- node.js - 使用 SSL 的 Nginx 安全性不会阻止 Postman/Http 客户端请求
- android - 尝试更新列表视图android中按钮的可见性
- python - 如何在给定其轴对齐边界框坐标Python的情况下获得对象的旋转
- r - 在 R 中,如果满足条件(等于 1),是否可以提取每个 ID 具有最早日期的行,如果不满足条件,则提取最晚日期?
- node.js - 我收到此错误:无法读取 null 的属性“喜欢”
- reactjs - redux-logger 突然不显示动作名称只有“对象,对象”
- linux - time + sftp 命令脚本:如何正确地将输出重定向到日志文件
- javascript - 访问 Zendesk 票证 api 时未经身份验证访问
- django - 如何将自定义查询的结果添加到 Django 管理站点 change_form 模板?
- java - Java 中的消费者类没有从注册的主题中获取消息。带有 Spring Boot 应用程序的 Kafka