React 实现计时器

这篇博客展示了如何利用React和Material-UI库创建一个简单的计时器组件。通过`useState`和`useRef`钩子管理状态,实现了开始和停止计时的功能,并实时显示已过去的时间。组件中还包含了Button、Box和Divider等Material-UI组件的应用。
摘要由CSDN通过智能技术生成

此处我主要用了Material-UI组件库

安装

yarn add @mui/material @emotion/react @emotion/styled

实现 

import React, { useRef } from "react"
import Button from "@mui/material/Button"
import Box from "@mui/material/Box"
import Divider from "@mui/material/Divider"
import Chip from "@mui/material/Chip"

export default function Time() {
	const [startTime, setStartTime] = useState(null)
	const [now, setNow] = useState(null)
	const refs = useRef(null)
	var secondsPassed = 0
	if (startTime != null && now != null) {
		secondsPassed = (now - startTime) / 1000
	}

	function handleStart() {
		setStartTime(Date.now())
		setNow(Date.now())
		clearInterval(refs.current)
		refs.current = setInterval(() => {
			setNow(Date.now())
		}, 10)
	}

	function handleStop() {
		clearInterval(refs.current)
	}

	return (
		<div>
			<Divider>
				<Chip label="useRef" />
			</Divider>
			<Box sx={{ width: "500px", marginTop: "10px", marginBottom: "10px" }}>
				<h1>Time:{secondsPassed.toFixed(3)}</h1>
				<Button variant="outlined" color="success" onClick={handleStart}>
					start
				</Button>
				<Button variant="outlined" color="error" onClick={handleStop}>
					stop
				</Button>
			</Box>
		</div>
	)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值