Я бы сделал это так:
constructor(props) {
super(props)
this.state={}
this.state.custum={
backgroundColor: 'darkgreen'
}
if (this.props.greenFlash){
this.intervalId = setInterval(() => {
this.setState(prevState => {
const bgcolor = (prevState.custum.backgroundColor === 'lightgreen') ? 'darkgreen' : 'lightgreen';
return {
custum:{
backgroundColor: bgcolor
}
}
})
}, 1000);
}
}
Несколько замечаний:
A) Вы экономите this.intervalId
, чтобы вы могли звонить clearInterval(this.intervalId)
в своем componentWillUnmount
. В противном случае ваш интервал будет продолжать вызывать еще долго после того, как ваш компонент был уничтожен.
B) вы можете определить свой интервал в componentDidMount
вместо конструктора, поскольку это обычно стандарт при вызове this.setState
, потому что this.setState
недоступен, пока не будет вызван componentDidMount
. Однако, поскольку первый раз он будет вызван через 1 секунду, я не собираюсь говорить, что это огромная проблема. Просто стандартная практика.