Javascript 当我的React应用程序中的路由发生更改时,我的clearInterval()和应用程序中断
我正在使用React路由器dom开发一个React应用程序 我有一个菜单,上面有一些反应路由器dom的Javascript 当我的React应用程序中的路由发生更改时,我的clearInterval()和应用程序中断,javascript,reactjs,setinterval,react-router-dom,Javascript,Reactjs,Setinterval,React Router Dom,我正在使用React路由器dom开发一个React应用程序 我有一个菜单,上面有一些反应路由器dom的,每一个菜单都会把我带到不同的路线 在我的主要路线path=“/”中,我有一个chartComponent,带有一个随随机数据不断变化的图表,如:this.chartChangeId=setInterval(()=>this.setState(data),1500) 在我添加此之前: componentWillUnmount(){ clearInterval(this.chartChan
,每一个菜单都会把我带到不同的路线
在我的主要路线path=“/”
中,我有一个chartComponent,带有一个随随机数据不断变化的图表,如:this.chartChangeId=setInterval(()=>this.setState(data),1500)
在我添加此之前:
componentWillUnmount(){
clearInterval(this.chartChangeId);
}
到chartComponent我的应用程序没有中断,但我遇到了以下错误:
警告:只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用setState、replaceState或forceUpdate。这是禁止的。
请检查BrainWaveChart组件的代码
所以我把它加入了生命周期
但是现在,当我点击其中一个
转到另一条路线时,我的应用程序中断,我得到以下错误:
未捕获类型错误:timeout.close不是函数
在exports.clearTimeout.exports.clearInterval(main.js:14)处
在BrainWaveChart.componentWillUnmount(BrainWaveChart.jsx:116)
at CALL组件将使用定时器卸载(供应商_f02cab182c1842c98837.js:45235)
在htmlunknowneelement.callCallback(供应商_f02cab182c1842c98837.js:37015)
位于Object.invokeGuardedCallbackDev(供应商_f02cab182c1842c98837.js:37054)
在invokeGuardedCallback(供应商_f02cab182c1842c98837.js:36911)
安全时,所有组件将卸载(供应商_f02cab182c1842c98837.js:45242)
在Commitumount(供应商_f02cab182c1842c98837.js:45368)
提交时(供应商_f02cab182c1842c98837.js:45404)
卸载主机组件时(供应商_f02cab182c1842c98837.js:45687)
我做错了吗 ()=>此.setState(数据)
正在执行,即使您清除了interval,因为它已经在内存中,并且在异步堆栈中。您需要做的是检查组件是否存在,然后才更新状态。最简单的方法是
const {clearInterval, setInterval} = window;
class Comp extends React.Component {
constructor(props) {
super(props);
this.mounted = false;
this.interval = setInterval(() => {
if(this.mounted) this.setState();
})
}
componentWillMount() {
this.mounted = true;
}
componentWillUnmount() {
this.mounted = false;
clearInterval(this.interval);
}
}
然而,这更多的是反兴奋剂。正确的方法是根本不在Ajax中使用setState 您的IDE可能会为您自动导入
{clearInterval}
,这就是造成问题的原因。
请检查您的文件中是否有
import{clearInterval}from…
语句,然后将其移除。
它发生在某些IDE中。
此链接提供更多信息:
@AjayGupta,如果您已经阅读了我分享的链接中的线程,您会理解这是一个特定于IDE的问题,而不是一个框架问题。