我是新來的使用React和作爲練習試圖修改時鐘示例 從React's splash page。我們的目標是在一個時間間隔內計算秒數,並以更快的間隔更改圓圈的顏色。反應和多個定時事件
我曾嘗試用setTimeout
功能的更改圈 要做到這一點,並呼籲他們從tick
函數中,但setTimeout
通話不被 認可。
這是React的問題,setInterval
與setTimeout
衝突? 如果是這樣,實現偏移定時事件的最佳方式是什麼?
謝謝你的時間。
<!doctype html>
<html>
<head>
<title>Timer</title>
<script src="https://unpkg.com/[email protected]/dist/react.js"></script>
<script src="https://unpkg.com/[email protected]/dist/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"></script>
<link rel="stylesheet" href="styles.css" >
</head>
<body>
<div id="root"></div>
</body>
<script type="text/babel">
var changed = false;
class GameDisplay extends React.Component{
constructor(props){
super(props);
this.colorChange = this.colorChange.bind(this);
this.state = {
secondsElapsed: 0,
};
}
tick(){
setTimeout(() => this.colorChange(), 250);
setTimeout(() => this.colorChange(), 250);
this.colorChange();
this.setState((prevState) => ({
secondsElapsed: prevState.secondsElapsed + 1,
}));
}
colorChange(){
var tgt = document.getElementById("heart");
if (changed){
tgt.style.fill = "red";
} else {
tgt.style.fill = "green";
}
changed = !changed;
}
componentDidMount(){
this.interval = setInterval(() => this.tick(), 1000);
}
componentWillUnmount(){
clearInterval(this.interval);
}
render(){
return(
<div>
<h1>Seconds Elapsed: {this.state.secondsElapsed}</h1>
<svg id="main_disp" width="300" height="300">
<circle cx="150" cy="150" r="50" fill="black" />
<circle id="heart" cx="150" cy="150" r="30" fill="red" />
</svg>
</div>
);
}
}
class App extends React.Component {
render(){
return(
<div>
<GameDisplay />
</div>
)
};
}
ReactDOM.render(
<App />,
document.getElementById("root")
);
</script>
</html>
Mehiel非常感謝你的時間和引用,這是一個很大的幫助。謝謝。 – Cameron