什么"警告:setState(...):只能更新已安装或安装的组件"意思?

时间:2016-09-11 21:46:59

标签: javascript html reactjs react-router react-jsx

修改

"警告:setState(...):只能更新已安装或安装的组件"意思?

2 个答案:

答案 0 :(得分:2)

Fisrt,将所有React组件重命名为像Camel Case一样。

class firstChild ... --> class FristChild
<fristChild> --> <FristChild>

其次,在你的FirstChild渲染方法中,你应该将元素包装成一个封闭的标记,如下所示:

class FirstChild extends Component {
render(){
   return (
      <div>
        <input ... />
        <button ... />
      </div>
   )
}
}

第三,当您在cloneElement上使用this.props.children时,您应该在Proptypes.<type>而不是secondChildren中使用Propstypes.<type>.isRequired。检查here以查看原因。

class SecondChild extends Component {
    static propTypes = {
      submitSuccess: React.PropTypes.bool, // remove isRequired
    }
}

无论如何,我已经测试了你的代码,它运行正常。

答案 1 :(得分:1)

您可以尝试使用componentWillUnmount生命周期功能,以检查组件何时卸载。

在设置状态之前,您还可以使用标志来表示组件已卸载:

saveName(nameText) {
    if (!this.isUnmounted){
        this.setState({submitSuccess: true});
    }
}

componentWillUnmount() {
    this.isUnmounted = true;
}