最佳答案
我知道这个问题已经被问过好几次了,但是大多数时候,解决方法是在父母中处理这个问题,因为责任流只是在降低。但是,有时需要从组件的某个方法中删除组件。 我知道我不能修改它的道具,如果我开始添加布尔值作为状态,对于一个简单的组件来说,它会变得非常混乱。以下是我试图实现的目标: 一个小的错误框组件,带有一个“ x”来忽略它。通过它的道具接收到一个错误将显示它,但我想要一个方法来关闭它从自己的代码。
class ErrorBoxComponent extends React.Component {
dismiss() {
// What should I put here?
}
render() {
if (!this.props.error) {
return null;
}
return (
<div data-alert className="alert-box error-box">
{this.props.error}
<a href="#" className="close" onClick={this.dismiss.bind(this)}>×</a>
</div>
);
}
}
export default ErrorBoxComponent;
我会像这样在父组件中使用它:
<ErrorBox error={this.state.error}/>
在 我应该在这里放什么?部分,我已经试过了:
ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(this).parentNode);
这会在控制台中抛出一个很好的错误:
警告: unmount 组件 AtNode () : 您试图卸载的节点是由 React 呈现的,不是顶级容器。相反,让父组件更新其状态并重新呈现,以便删除此组件。
我是否应该以 ErrorBox 状态复制传入的道具,并仅在内部操作它?