@rgs350

Модальные окна. Куда и как рендерить?

Здравствуйте. Есть модальное окно (ну например с информацией о товаре) + несколько элементов управления (кнопки), при нажатии на которые должно отображаться это модальной окно. Куда рендерить модальное окно?
1. В каждой кнопке писать {this.state.isShowModal && <Modal/>}, но как-то глупо хардкодить его в каждом элементе управления.
2. Тоже самое в App, но тогда при открытии каждого окна будет реконсилироваться всё приложение.
  • Вопрос задан
  • 1243 просмотра
Решения вопроса 1
@davidnum95
Рендерить можно через портал в корне приложения, управлять состоянием через контекст. Получится что то типа:
<ModalContext.Consumer>
    {(showModal) => <button onClick={() => showModal(modalProps)}>Open Modal</button>}
</ModalContext.Consumer>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Модальные окна необязательно должны отдавать в render что-то, кроме как null, когда они "закрыты". Поэтому рендерьте окна ближе к корню DOM-дерева приложения, они будут рендериться, но в render будет null, если isShowModal = false.
Ответ написан
@forspamonly2
как раз для этого в реакте теперь есть порталы:
https://reactjs.org/docs/portals.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы