Я пытаюсь отобразить Modal
в React
, и после вызова onClose
он должен закрыться. У меня есть функция под названием showModal()
:
showModal = () => {
this.setState(prev=>({
modalOpen: !prev.modalOpen
}));
};
И я привязываю ее в конструкторе:
constructor(props) {
super(props);
this.state = {
...
modalOpen: false,
};
this.showModal = this.showModal.bind(this);
}
В какой-то момент я вызываю свой Modal
компонент:
function = () => {
...
return (
<div {...attrs}>
...
<div>
<DocumentModal onClose={this.showModal} show={this.state.modalOpen} document = {documents[0].id} />
<button onClick={() => {this.showModal()}}>{click me} »</button>
</div>
}
</div>
</div>
);
}
А вот компонент Modal
:
class DocumentModal extends React.Component {
constructor(props) {
super(props);
this.state = {
id: this.props.document,
};
}
...
render() {
const modalStyles = {
modal: {
minWidth: '400px',
padding: '2rem',
}
};
if (!this.props.show) {
return null;
}
return (
<div>
<Modal open={this.props.show} little showCloseIcon={true} styles={modalStyles}>
<div className="item">
...
<button type="button" className="close" aria-label="Close"
onClick={() => {this.props.onClose()}}/>
</div>
</Modal>
</div>
);
}
}
Modal.propTypes = {
onClose: PropTypes.func.isRequired,
show: PropTypes.bool,
document: PropTypes.string,
};
export default DocumentModal;
При нажатии на кнопку close
внутри Modal
я получаю следующую ошибку:
Uncaught TypeError: n.props.onClose is not a function
at n.onClickCloseIcon (modal.js:66)
at Object.c (react-dom.production.min.js:26)
at Object.invokeGuardedCallback (react-dom.production.min.js:25)
at Object.invokeGuardedCallbackAndCatchFirstError (react-dom.production.min.js:25)
at p (react-dom.production.min.js:30)
at b (react-dom.production.min.js:32)
at y (react-dom.production.min.js:32)
at Array.forEach (<anonymous>)
at v (react-dom.production.min.js:31)
at S (react-dom.production.min.js:34)
Возможно, стоит упомянуть, что существует несколько элементов, для которых отображается Modal
. Например, 5 разных элементов с 5 разными ID's
, но метод onClose
по-прежнему одинаков для всех.
Что я делаю не так?