Как работает передача пропсов в микрофронтах и федеративном приложении?
Что проверяют
Понимаете ли вы, что способ передачи данных зависит от того, как микрофронтенд встроен: общим React-деревом через Module Federation или отдельным приложением со своим рендером. Следом спрашивают, как хост и remote договариваются о контракте и что будет, когда remote выкатит новую версию.
Как отвечать
- общее React-дерево: remote отдаёт через
exposesобычный компонент, хост грузит егоReact.lazy(() => import('checkout/Widget'))и передаёт пропсы как любому компоненту, включая колбэки. Условие:reactиreact-domобъявлены вsharedсsingleton: true, иначе на странице две копии React и хуки падают с «Invalid hook call»; - контекст: работает, только если модуль с
createContextтоже общий. Если каждый бандл собрал свою копию, это два разных контекста, и remote увидит значение по умолчанию; - независимый рендер: если у remote другой фреймворк или своя версия React, он экспортирует
mount(el, props)иunmount(). Пропсы уходят аргументами, а при их изменении хост сам вызываетupdate(props)или повторныйmount; - Web Components: данные вниз через свойства элемента, наверх через
CustomEvent. Атрибуты годятся только для строк; - iframe: только
postMessage, то есть сериализуемые данные, функцию не передать.
Главное в ответе это контракт. Пропсы между независимыми деплоями компилятор не проверяет, поэтому типы remote публикуют отдельным пакетом или генерируют (в Module Federation 2.0 для этого есть встроенная выгрузка типов). На хосте remote оборачивают в Suspense и Error Boundary: недоступный remote не должен ронять страницу.
Для общих данных вроде пользователя и языка лучше минимальный канал (пропсы сверху, URL, шина событий), чем общий Redux-стор на все микрофронтенды: он связывает команды сильнее монолита.
Где спотыкаются
Рассказывают про пропсы в React вообще, ни слова о границе сборок, shared и версиях.
Передают в mount объект с данными один раз и удивляются, что remote не видит обновлений: без явного update связи между деревьями нет.
Меняют форму пропсов в remote и деплоят его отдельно. Хост ломается в рантайме: его типы проверялись при сборке со старым контрактом.