В проекте потребовалось динамически создавать и показывать простое модальное окно по клику на кнопке.
Задумка такая: при клике генерируется событие, все слушатели как-то на него реагируют. Среди них есть компонент модального окна, который на основе получаемых данных рендерит соответствующий блок или, при необходимости, обновляет в нем данные.
Можно было бы взять любой шаблонизатор, тот же nunjucks, который мне как родной, и создавать это самое окно.
Но так как в дальнейшем в проекте скорее всего будут более сложные элементы, я решил с заделом на будущее взять в качестве View React js, с которым , правда, совсем никогда не работал.
Получилось как-то так:
....
this.on('showModal', function (data) {
ReactDOM.render(
<this.renderWindow data={data} />,
this.el
);
});
....
Модальное окно создается, все ок. Теперь его надо как-то скрывать. Добавляю состояние this.state.show.
Теперь по клику оно даже скрывается.
Но по событию 'showModal', оно повторно не показывается. Я так понимаю, что вызывается ReactDOM.render(...); Реакт проверяет состояние - оно не изменилось, this.state.show все еще равно false, и он просто ничего не делает.
Я смотрел примеры реализации модального окна на Реакте. В них всегда кнопка "Показать окно" является частью компонента и просто меняет state.
У меня эта кнопка находится вообще в другом месте, рендерится на сервере и я ее никак не хочу связывать с окном или делать реакт-компонентом. Хотелось бы просто по событию менять state компонента.
Но как это сделать - не пойму.
Или лучше вообще в таком случае не тащить Реакт в проект и сделать view на чем-то другом?