【发布时间】:2021-07-04 19:26:36
【问题描述】:
我正在尝试使用 ReactJS 构建一个红绿灯。我需要红绿灯按红色、黄色、绿色、红色、黄色、绿色等顺序行驶。我当前的代码给了我不同的模式。我不太清楚如何在这个上使用 setInterval,我真的可以使用一些帮助。我在 CodePen 上查看了 CarterTsai 对同一问题的解决方案,但我既无法理解他的大部分代码,也无法将其转换为对 stackblitz 友好的格式以使其适应我的代码。有人有答案吗?任何帮助表示赞赏!如果有人能提供一个包含两个组件的解决方案,那就太好了——一个改变交通信号灯状态,另一个利用该状态显示实际的交通信号灯(这是我作业的要求)。
这里是查看我在 stackblitz 上的项目的链接:https://stackblitz.com/edit/react-eqkhd7?file=src/style.css
我在 App.js 中的代码:
import React from 'react';
import './style.css';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
color1: '',
color2: '',
color3: ''
};
setInterval(this.changeColor1.bind(this), 2000);
setInterval(this.changeColor2.bind(this), 4000);
setInterval(this.changeColor3.bind(this), 6000);
}
changeColor1 = () => {
this.setState({ color1: 'red', color2: '', color3: '' });
};
changeColor2 = () => {
this.setState({ color1: '', color2: 'yellow', color3: '' });
};
changeColor3 = () => {
this.setState({ color1: '', color2: '', color3: 'green' });
};
render() {
return (
<div>
<span style={{ backgroundColor: this.state.color1 }} class="circle" />
<p />
<span style={{ backgroundColor: this.state.color2 }} class="circle" />
<p />
<span style={{ backgroundColor: this.state.color3 }} class="circle" />
</div>
);
}
}
style.css:
h1,
p {
font-family: Lato;
}
.circle {
margin: auto;
height: 100px;
width: 100px;
border: 5px black solid;
border-radius: 50%;
display: block;
}
index.js:
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App />, document.getElementById("root"));
【问题讨论】:
标签: javascript reactjs state setinterval stackblitz