reactjs:是否有公共API来检查组件是否已挂载/卸载

时间:2016-09-14 16:22:09

标签: reactjs

基本上我想在一个组件中有这个:

setTimeout(() =>
{
  if (this.isMounted())  // NOTE: this does not exist
    setState({ foo: 123 });
}, 5000);

但是没有API,我错了吗?

在未安装的组件上调用setState()被视为错误(在开发模式下由React记录此错误)。

当然,我可以通过设置componentWillUnmount()等来设置this._mounted = false中的状态,但如果不需要,我也不想添加私有状态。

1 个答案:

答案 0 :(得分:1)

虽然这是最初为isMounted()创建的确切方案,但目前的建议为usage of isMounted() is bad and will be removed in future React versions

相反,您应该检查卸载组件时是否正确取消了任何异步函数。如果您使用setTimeout,只需保存超时标识符并在componentWillUnmount中取消即可:

this.timeout = setTimeout(() => {
  this.setState({ foo: 123 });
}, 5000);

...

componentWillUnmount() {
  clearTimeout(this.timeout)
}

所以要回答你的问题,没有,并且应该没有用于检查组件是否已安装的API。这是因为在卸载时,应清除对组件的所有引用,以便垃圾收集器可以将其从内存中删除。