Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我的React应用程序中的路由发生更改时,我的clearInterval()和应用程序中断_Javascript_Reactjs_Setinterval_React Router Dom - Fatal编程技术网

Javascript 当我的React应用程序中的路由发生更改时,我的clearInterval()和应用程序中断

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

我正在使用React路由器dom开发一个React应用程序

我有一个菜单,上面有一些反应路由器dom的
,每一个菜单都会把我带到不同的路线

在我的主要路线
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的问题,而不是一个框架问题。