【发布时间】:2018-08-30 13:48:12
【问题描述】:
我正在使用 react 编写一个网站。在一个组件中,我有一个被执行的setInterval() 函数,它会更新它们DOM。现在,当我使用路由器 (react-router-dom) 切换到另一个站点时,setInterval() 函数崩溃了,因为它找不到要更新的 DOM 元素。我该怎么做呢?我虽然使用componentWillUnmount(),但发生了同样的错误。
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {
stop: false,
}
}
componentWillUnmount() {
if(!this.state.stop) {
this.setState({
stop: true,
})
}
}
_stop = (counter) => {
clearInterval(counter);
}
_someFunc = () => {
...
}
render() {
...
const update = setInterval(function () {
document.getElementById('some-id').innerText = this._someFunc();
}, 1000);
if(this.state.stop) {
this._stop(update)
}
return (
<p id='some-id'></p>
)
}
}
export default Counter;
TypeError: document.getElementById(...) 为空。
如何停止间隔?
【问题讨论】:
-
在将文本放入之前检查元素是否存在。
-
@SenadMeškin 会产生大量不必要的 if/else 问题。
-
看来你应该在卸载部分调用 stop。
标签: javascript reactjs setinterval