Если я правильно понимаю вещи, ваша основная задача - повторное использование кода, а не желание вызвать метод одного из братьев. По сути, вам нужен компонент SelectFilePopup, который может быть повторно использован (открыт / закрыт) чисто. Я думаю, что React Portals может быть хорошим решением для этого. Я нашел хороший пример (https://github.com/Assortment/react-modal-component/blob/master/src/components/Modal.js) того, как модал может быть выделен в компонент и вызываться в любом месте кодовой базы.
Использование модального режима выглядит следующим образом (скопировано и немного изменено из App.js в проекте github выше)
import Modal from './components/Modal';
<Modal><div>Click me to open Modal</div></Modal>
И Модальная составляющая реализации (упрощенная)
render() {
return (
<Fragment>
<ModalTrigger
onOpen={this.onOpen}
/>
{isOpen &&
<ModalContent/>
}
</Fragment>
)
}
По умолчанию модальный компонент показывает триггер (т.е. кнопку), когда состояние isOpen имеет значение false. После щелчка, и isOpen переключается в true, ModalContent (т.е. это может быть FilePickerPopup) динамически создается и прикрепляется к телу документа. Вы можете проверить исходный код для более подробной информации. Я думаю, что это очень чистое решение для модальных Так что в вашем случае ваш код может выглядеть примерно так
UploadScreen.js
import FileSelectPopup from './components/FileSelectPopup';
<FileSelectPopup>{Upload Image}</FileSelectPopup>
AuxWidget.js
import FileSelectPopup from './components/FileSelectPopup';
<FileSelectPopup>{Upload Image or some other text}</FileSelectPopup>
Так что, в принципе, AuxWidget даже не нужно знать, где находится FileSelectPopup. Это независимый компонент, который можно вызывать где угодно. Предостережение заключается в том, что модальная реализация в проекте, с которым я связан, не является одноэлементной (хотя ее можно изменить, чтобы она была). Поэтому, если AuxWidget и UploadScreen видны пользователю одновременно, нажатие обеих кнопок Upload Image создаст два экземпляра Popup.