В рамках текущей рабочей задачи у меня был кейс — вызвать модалку, созданную как React-компонент, из SharePoint Ribbon. Короче говоря, SharePoint ribbon — это структура, которая содержит кнопки и привязанные к ним js-функции. Когда ты нажимаешь кнопку, вызывается привязанная к ней js-функция... надеюсь, ты понимаешь :). И я начал гуглить: как взаимодействовать с react-модулем из внешнего js, как изменить react-стейт из внешнего js, как форсировать ре-рендер react-компонента из чистого js и так далее... Так вот, основная проблема в том, что нельзя привязать функцию react-компонента к кнопке ribbon, потому что она спрятана глубоко внутри webpack js-бандла. Также мне нужно было менять стейт React-модуля, потому что я хотел ре-рендерить компонент по клику на кнопку. Поэтому я сделал fiddle, и, похоже, всё работает корректно — https://jsfiddle.net/o6ujb5g2/. Это не SharePoint ribbon, но почти то же самое. Идея в том, чтобы прикрепить функцию из react-модалки к глобальному объекту window. Этот объект существует практически везде.
Шаги:
Я создал функцию-заглушку на чистом js для window.func, которую хочу переопределить из компонента (это для подстраховки, если с рендером компонента что-то пойдёт не так)
В компоненте я инициализирую функцию с бизнес-логикой, которая меняет стейт компонента
В componentDidMount я переопределяю глобальную window.func на module.func