Я знаю, что этот вопрос задавали пару раз уже, но большую часть времени, решение должно справиться с этим в родительском, поскольку поток ответственности только спускается. Однако иногда вам нужно убить компонент из одного из его методов. Я знаю, что не могу изменить его реквизит, и если я начну добавлять булевы как состояние, это станет действительно грязным для простого компонента. Вот что я пытаюсь достичь: Небольшой компонент окна ошибок с "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);
Что вызывает приятную ошибку в консоли:
Предупреждение: unmountComponentAtNode(): node, который вы пытаетесь размонтировать, был отображен React и не является контейнером верхнего уровня. Вместо этого родительский компонент обновит свое состояние и rerender, чтобы удалить этот компонент.
Должен ли я копировать входящие реквизиты в состояние ErrorBox и управлять им только внутри?