React 中闪烁速度不一致
Inconsistent Blinker speed in React
我正在尝试在 React 中创建一个信号灯,但是,信号灯本身以不一致的速度闪烁/呈现并且表现得有些令人沮丧。请参阅随附的代码段。组件安装有什么问题吗?谢谢!
class Blinker extends React.Component {
constructor(props) {
super();
this.state = {
appear: true
}
this.blinker = this.blinker.bind(this);
}
blinker() {
this.setState({appear: !this.state.appear });
}
componentDidMount() {
setInterval(this.blinker, 1000)
}
componentDidUpdate() {
setTimeout(this.blinker, 1000)
}
render() {
return (
<div>
{ (this.state.appear) && "xxx" }
</div>
);
}
}
ReactDOM.render(
<Blinker />,
app
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
删除 componentDidUpdate
。为什么要在组件更新后触发新的一秒超时? didMount
的间隔仍为 运行。
此外,您需要清除组件卸载的时间间隔:
componentDidMount() {
this.blinkerId = setInterval(this.blinker, 1000)
}
componentWillUnmount() {
clearInterval(this.blinkerId);
}
我正在尝试在 React 中创建一个信号灯,但是,信号灯本身以不一致的速度闪烁/呈现并且表现得有些令人沮丧。请参阅随附的代码段。组件安装有什么问题吗?谢谢!
class Blinker extends React.Component {
constructor(props) {
super();
this.state = {
appear: true
}
this.blinker = this.blinker.bind(this);
}
blinker() {
this.setState({appear: !this.state.appear });
}
componentDidMount() {
setInterval(this.blinker, 1000)
}
componentDidUpdate() {
setTimeout(this.blinker, 1000)
}
render() {
return (
<div>
{ (this.state.appear) && "xxx" }
</div>
);
}
}
ReactDOM.render(
<Blinker />,
app
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
删除 componentDidUpdate
。为什么要在组件更新后触发新的一秒超时? didMount
的间隔仍为 运行。
此外,您需要清除组件卸载的时间间隔:
componentDidMount() {
this.blinkerId = setInterval(this.blinker, 1000)
}
componentWillUnmount() {
clearInterval(this.blinkerId);
}