【发布时间】:2020-08-08 09:17:39
【问题描述】:
目前我正在开发闹钟应用程序,我想这样做,以便您可以添加多个闹钟。每个警报都以 alarms:[] 状态存储在 App.js 文件中。如果添加了闹钟,我想将该闹钟显示为时钟下方的 li 元素,并且我希望能够通过单击 X 图标将其删除。此外,当当前时间 === 为闹钟设置的时间时,Ring.js 组件呈现并且闹钟开始响铃。当闹钟响起时,会有“关闭”按钮。单击关闭按钮后如何从状态数组中删除正在响铃的特定警报?
我尝试在满足条件时将 removeAlarm 函数和警报(这可能有助于确定从数组删除中确定哪个警报)作为该组件的道具。
function checkTime(){
if(time.alarms[0]){
const alarms = time.alarms.map(function(alarm,i){
if(time.currentHour === alarm.hour && time.currentMinute === alarm.minute && time.currentSecond
>= 0){
return <Ring message={alarm.message} key={i} alarm={alarm} removeAlarm={removeAlarm} />
}
})
return alarms;
}
}
removeAlarm 功能:
function removeAlarm(alarm){
setTime(prevState => ({
...prevState,
alarms:[...prevState.alarms.filter(el => el !== alarm)]
}))
}
Ring.js 文件
let message = props.message;
function removeAlarm(alarm){
props.removeAlarm(alarm);
}
function turnOff(e,alarm){
e.preventDefault();
setShowRing(false);
removeAlarm(alarm);
}
<form>
<h3>{message}</h3>
<button onClick={turnOff}>TURN OFF</button>
</form>
我不知道该怎么做。我不知道如何使用传递的函数或如何在 onClick 函数中确定这是必须发送到 removeAlarm 函数的按钮,映射到状态并删除该特定的。
我注意到的第二个问题是 React Spring Transitions。我在 Ring.js,Alarm.js 中使用它,还想用它来列出 ListAlarms.js 中的活动警报。我使用它的方式与前两个组件完全相同,但对于 ListAlarms.js,它不起作用,我不明白为什么。我的目标是显示那些带有转换的活动警报,而不仅仅是在那里“闪烁”。
谢谢。
CodeSandBox 链接here
【问题讨论】:
标签: javascript reactjs components react-state