我如何安全地关闭'或销毁React组件?

时间:2014-12-02 20:30:19

标签: javascript reactjs

我正在组装一个模块化编辑器表单。主编辑器组件动态呈现文本,复选框和选择字段,具体取决于它所针对的项目(在列表中)。编辑器组件通过页面主要组件中的函数呈现:

if(this.state.isEditing) return (
    <ReForm.Editor key={this.state.editTarget.id} editTarget={this.state.editTarget} map={appointmentMap}/>
)

当用户点击可编辑项目时,this.state.editTarget会更新,isEditing设置为true,从而呈现编辑器。

此时没有问题。我可以使用this.setState()编辑编辑器的状态,当我保存编辑时,它们会通过类似Flux的管道正确推送到我的数据库。

问题出现在我关闭编辑器并重新打开它之后。关闭编辑器只需将页面的this.state.isEditing设置为false,即可卸载编辑器组件。重新打开编辑器视图与以前完全相同,但现在当编辑器中的值通过this.setState()更改时,会引发以下错误:

Uncaught Error: Invariant Violation: replaceState(...): Can only update a mounted or mounting component.
从编辑器的true回调中运行this.isMounted()时,会返回

componentDidMount

但是,在尝试false

之前运行时,this.isMounted()会返回setState()

这只发生在我关闭并重新打开编辑器之后,所以我认为这与如何安全地关闭&#39;有关。或销毁React组件。

0 个答案:

没有答案