Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Reactjs React componentWillUnmount-如果组件将从DOM中删除,从而停止计时器等,为什么要取消任何操作?_Reactjs - Fatal编程技术网

Reactjs React componentWillUnmount-如果组件将从DOM中删除,从而停止计时器等,为什么要取消任何操作?

Reactjs React componentWillUnmount-如果组件将从DOM中删除,从而停止计时器等,为什么要取消任何操作?,reactjs,Reactjs,我想知道并且找不到关于以下内容的任何信息:如果某个组件将卸载,那么所有订阅或计时器等都将停止。如果在不使用componentWillUnmount的情况下发生这种情况,为什么我需要在componentWillUnmount中删除它们?! 例如,如果我的componentDidMount中有setInterval,它将在组件卸载后停止,那么为什么我要取消setInterval?setInterval和setTimeout附加到窗口,而不是您的组件,因此,当您卸载组件时,它不会被清除,它可能仍然调用

我想知道并且找不到关于以下内容的任何信息:如果某个组件将卸载,那么所有订阅或计时器等都将停止。如果在不使用componentWillUnmount的情况下发生这种情况,为什么我需要在componentWillUnmount中删除它们?!
例如,如果我的componentDidMount中有setInterval,它将在组件卸载后停止,那么为什么我要取消setInterval?

setInterval
setTimeout
附加到
窗口,而不是您的组件,因此,当您卸载组件时,它不会被清除,它可能仍然调用引用您组件的回调函数,例如调用
this.setState
,如果组件卸载,它将发出警告。

setInterval
setTimeout
附加到
窗口,而不是您的组件,因此,当您卸载组件时,它不会被清除,它可能仍会调用引用您组件的回调函数,例如调用
this.setState
,如果组件被卸载,它将发出警告。

否,它不会被取消。这就是为什么您必须取消componentWillUnmount中的所有订阅。您可以自己检查它,从组件内部将任何事件列表器绑定到窗口,在其中编写控制台,即使您的组件将从dom中删除,您仍然可以看到控制台和事件触发,如果您在卸载时未将其删除


是的,在卸载组件后,您可能看不到dom中的效果,但它仍可能在后台运行,这可能会导致错误或影响应用程序的性能。

否,不会取消。这就是为什么您必须取消componentWillUnmount中的所有订阅。您可以自己检查它,从组件内部将任何事件列表器绑定到窗口,在其中编写控制台,即使您的组件将从dom中删除,您仍然可以看到控制台和事件触发,如果您在卸载时未将其删除


是的,在卸载组件后,您可能看不到dom中的效果,但它仍可能在后台运行,这可能会导致错误或影响应用程序的性能。

谢谢,我相信它不会被取消,也不会被混淆。谢谢,我相信它不会被取消,也不会被混淆。谢谢。一个附带的问题:如果它没有连接到我的组件,为什么不在setInterval内设置状态,给我一个错误:[……]未定义,因为如果我的组件被卸载,它就不再有状态,在setInterval中我会尝试设置它?相反,我只看到了一个警告,我相信这是因为您的组件是一个js函数或类,它被导入并且仍然存在——从技术上讲——即使在卸载之后。这就是定义。这就是react的工作方式,谢谢。一个附带的问题:如果它没有连接到我的组件,为什么不在setInterval内设置状态,给我一个错误:[……]未定义,因为如果我的组件被卸载,它就不再有状态,在setInterval中我会尝试设置它?相反,我只看到了一个警告,我相信这是因为您的组件是一个js函数或类,它被导入并且仍然存在——从技术上讲——即使在卸载之后。这就是定义。这就是react的工作方式。