Логика при создании модального окна?
В Main добавляете state, например, "показать-модалку" со значением false по умолчанию.
Также в Main делаете фунцию, например, "switchModal" в которой делаете setState({ "показать-модалку": !this.state."показать-модалку"}). На Button вешаете "switchModal" по клику.
Modal показываете в зависимости от state. Типа {"показать-модалку" && <Modal />}
В сам Modal передаете props с функцией "switchModal".
Внутри Modal делаете функциюcloseModal = () => { this.props.switchModal() }
Вешаете "closeModal" на элемет по клику на который хотите закрывать Modal.
По клику на кнопку установи передай пропс состояния в модалку.