当前位置:  开发笔记 > 编程语言 > 正文

setState(...):只能更新已安装或安装的组件.这通常意味着您在已卸载的组件上调用了setState().这是一个无操作

如何解决《setState():只能更新已安装或安装的组件.这通常意味着您在已卸载的组件上调用了setState().这是一个无操作》经验,为你挑选了2个好方法。

我通过为组件分配ref然后在设置状态之前检查ref是否存在来解决这个问题:

myMethod(){
  if (this.refs.myRef) 
   this.setState({myVar: true});
}

render() {
  return (
    
{this.state.myVar}
); }

谢谢你!然而,这是非常恶化的.几乎我的所有场景都基于promise进行加载,并抛出此错误.为什么React只能默默地拒绝在卸载状态下运行setState.这并不像任何人会看到差异. (10认同)


Brigand.. 23

removeEventListener与...有相同的签名addEventListener.删除侦听器的所有参数必须完全相同.

var onEnded = () => {};
audioNode.addEventListener('ended', onEnded, false);

this.cleanup = () => {
  audioNode.removeEventListener('ended', onEnded, false);
}

并在componentWillUnmount调用this.cleanup().



1> Tudor Morar..:

我通过为组件分配ref然后在设置状态之前检查ref是否存在来解决这个问题:

myMethod(){
  if (this.refs.myRef) 
   this.setState({myVar: true});
}

render() {
  return (
    
{this.state.myVar}
); }


谢谢你!然而,这是非常恶化的.几乎我的所有场景都基于promise进行加载,并抛出此错误.为什么React只能默默地拒绝在卸载状态下运行setState.这并不像任何人会看到差异.

2> Brigand..:

removeEventListener与...有相同的签名addEventListener.删除侦听器的所有参数必须完全相同.

var onEnded = () => {};
audioNode.addEventListener('ended', onEnded, false);

this.cleanup = () => {
  audioNode.removeEventListener('ended', onEnded, false);
}

并在componentWillUnmount调用this.cleanup().

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有