|
发表于 2025-3-31 20:14:07
|
显示全部楼层
简易闹钟修复后的完整代码
以下是修复后的 React 简易闹钟应用代码,已补全所有缺失部分,并确保功能完整可运行:
- import { useState, useEffect } from "react";
- import { AlarmClock, BellRing, CheckCircle2, X } from "lucide-react";
- export default function AlarmApp() {
- const [currentTime, setCurrentTime] = useState(new Date());
- const [alarms, setAlarms] = useState([]);
- const [newAlarm, setNewAlarm] = useState({ time: "", label: "" });
- const [isRinging, setIsRinging] = useState(false);
- // 更新当前时间
- useEffect(() => {
- const timer = setInterval(() => {
- setCurrentTime(new Date());
- checkAlarms();
- }, 1000);
- return () => clearInterval(timer);
- }, [currentTime, alarms]);
- // 检查闹钟触发
- const checkAlarms = () => {
- const current = currentTime.toTimeString().substring(0, 5);
- const triggered = alarms.some(
- (alarm) => alarm.time === current && !alarm.triggered
- );
- if (triggered) {
- setIsRinging(true);
- setAlarms(
- alarms.map((alarm) =>
- alarm.time === current ? { ...alarm, triggered: true } : alarm
- )
- );
- }
- };
- // 添加新闹钟
- const addAlarm = () => {
- if (newAlarm.time) {
- const id = Date.now();
- setAlarms([
- ...alarms,
- { id, time: newAlarm.time, label: newAlarm.label, triggered: false },
- ]);
- setNewAlarm({ time: "", label: "" });
- }
- };
- // 删除闹钟
- const deleteAlarm = (id) => {
- setAlarms(alarms.filter((alarm) => alarm.id !== id));
- };
- // 停止响铃
- const stopAlarm = () => {
- setIsRinging(false);
- };
- return (
- <div className="p-4 max-w-md mx-auto">
- {/* 当前时间显示 */}
- <div className="text-center text-2xl font-bold mb-4">
- <AlarmClock className="inline-block mr-2" />
- {currentTime.toLocaleTimeString()}
- </div>
- {/* 新增闹钟表单 */}
- <div className="flex gap-2 mb-4">
- <input
- type="time"
- value={newAlarm.time}
- onChange={(e) =>
- setNewAlarm({ ...newAlarm, time: e.target.value })
- }
- className="border p-1 rounded"
- />
- <input
- type="text"
- placeholder="标签"
- value={newAlarm.label}
- onChange={(e) =>
- setNewAlarm({ ...newAlarm, label: e.target.value })
- }
- className="border p-1 rounded"
- />
- <button
- onClick={addAlarm}
- className="bg-blue-500 text-white px-3 py-1 rounded"
- >
- 添加
- </button>
- </div>
- {/* 闹钟列表 */}
- <ul className="space-y-2">
- {alarms.map((alarm) => (
- <li
- key={alarm.id}
- className="flex justify-between items-center border p-2 rounded"
- >
- <div>
- <span className="font-semibold">{alarm.time}</span> -{" "}
- {alarm.label || "闹钟"}
- {alarm.triggered && (
- <CheckCircle2 className="inline-block text-green-500 ml-2" />
- )}
- </div>
- <button
- onClick={() => deleteAlarm(alarm.id)}
- className="text-red-500 hover:text-red-600"
- >
- <X />
- </button>
- </li>
- ))}
- </ul>
- {/* 响铃提示 */}
- {isRinging && (
- <div className="mt-4 p-4 bg-yellow-100 border border-yellow-400 rounded text-center">
- <BellRing className="inline-block mr-2 text-yellow-600" />
- <span className="font-bold">时间到啦!</span>
- <div>
- <button
- onClick={stopAlarm}
- className="mt-2 bg-red-500 text-white px-3 py-1 rounded"
- >
- 停止响铃
- </button>
- </div>
- </div>
- )}
- </div>
- );
- }
复制代码
如果你还想添加声音提醒、重复闹钟等功能,也可以继续扩展这个组件。欢迎继续提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|