Ваш вопрос гласит: «Итак, здесь я вижу, что модал появляется и исчезает, когда я нажимаю кнопку события / закрытия ...», но в комментариях вы заявляете «но я просто не могу понять, что написать для его рендеринга».
Я собираюсь предположить, что модал рендерится, и проблема в том, что вы не знаете, как использовать обратный вызов eventClick.
ADyson был в курсе проблемы, с которой вы столкнулись.Вы уже настроили обратный вызов, FullCalendar считает вашу функцию переключения вызываемой функцией, когда она вызывает событие , щелкнув .Когда вызывается ваша функция переключения, ей передается объект eventClickInfo, который дает вам доступ к событию, HTML-элементу, jsEvent и представлению.
Таким образом, изменение этого переключателя даст вам доступ к событию:
toggle(eventClickInfo) {
console.log(eventClickInfo);
this.setState(prevState => ({
modal: !prevState.modal
}));
}
* Я бы изменил имя на handleEventClick или eventClick.
Обновление 1: На основании приведенных выше комментариев я взял вашу кодовую песочницу и обновлено.Я изменил следующее:
- Переместил модал в функцию рендеринга, чтобы он отображался, затем обновлялся из состояния.
- Добавлял событие в объект состояния, чтобы при щелчке по событиюэто обновлено.Это то, что отображается в диалоге.
Изменен класс на className в div с календарем идентификаторов, поскольку это стандартно в React, поскольку класс является ключевым словом в JS.
class Calendar extends React.Component {
state = {
modal: false,
event: {
title: "",
start: new Date()
}
};
toggle = () => {
this.setState({ modal: !this.state.modal });
};
handleEventClick = ({ event, el }) => {
this.toggle();
this.setState({ event });
};
render() {
return (
<div id="calendar" className="container" ref="calendar">
<FullCalendar
header={{
left: "prev,next today",
center: "title",
right: "dayGridMonth, listWeek"
}}
selectable={true}
plugins={[interaction, dayListPlugin, dayGridPlugin, bootstrapPlugin]}
themeSystem="bootstrap"
weekends={false}
displayEventTime={true}
timeZone="UTC"
events={[
{ title: "event 1", date: "2019-05-01" },
{ title: "event 2", date: "2019-05-02" }
]}
eventRender={this.handleEventRender}
eventClick={this.handleEventClick}
/>
<Modal
isOpen={this.state.modal}
toggle={this.toggle}
className={this.props.className}
>
<ModalHeader toggle={this.toggle}>
{this.state.event.title}
</ModalHeader>
<ModalBody>
<div>
<p>{this.state.event.start.toISOString()}</p>
</div>
</ModalBody>
<ModalFooter>
<Button color="primary">Do Something</Button>{" "}
<Button color="secondary" onClick={this.toggle}>
Cancel
</Button>
</ModalFooter>
</Modal>
</div>
);
}
}