【发布时间】:2017-07-24 14:57:14
【问题描述】:
我是 ReactJS 和 javascript 的初学者
我有一个关于How can I setState on two array elements at once?的问题
在那个问题上,响应者告诉我无论如何都不要改变状态。
但我还有一个问题,如果我想使用clearInterval() 停止倒数计时器,当计时器到达 0 时。
在我对 codePen Timer Demo 2 的新尝试中,
我使用find()方法找到时间为0的元素,并使用clearInterval停止倒计时,但是如果一个元素的时间到了0而另一个不是,则全部停止。
我该如何解决?
const timers = [
{
id: 1,
time: 5,
timeIsUp: false,
},
{
id: 2,
time: 10,
timeIsUp: false,
},
];
class Clock extends React.Component {
constructor(props) {
super(props);
this.state= {
timers,
}
this.time_controller = 0;
}
componentDidMount(){
this.time_controller = setInterval(() =>{
this.countDown();
}, 1000)
}
countDown(){
const foundTimers = this.state.timers.map(timer => ({
...timer,
time: timer.time-1
}));
this.setState({timers: foundTimers});
const foundTimer = foundTimers.find(timer => timer.time === 0 );
if(!!foundTimer){
clearInterval(this.time_controller);
}
}
renderTimers(){
return(
this.state.timers.map((timer) =>{
return(
<div key = {timer.id} >
<div>{timer.time}</div>
</div>
)
})
)
}
render() {
return (
<div>
{this.renderTimers()}
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('root')
);
【问题讨论】:
-
@AndrewLi 所以我需要将 time_controller 添加到数组元素中?
标签: javascript reactjs