У меня возникла небольшая проблема с пониманием компонентов высшего порядка Reacts в сочетании с flowtype и Props.
У меня есть 2 вида HOC:
Компонент внутри модального окна:
inModal() => React.Component<{modal: Modal}>
В этом HOC просто создайте новый модальный (некоторая логика без реакции, я уже реализовал) и передайте модальный объект как свойство данному компоненту (чтобы я мог получить доступ к обработчикам закрытия и так далее внутри моего компонента).
Компонент, защищенный аутентификацией:
needsAuthentication() => React.Component<{auth: Authentication}>
Таким образом, я могу предоставить некоторые важные функции, такие как отключение учетной записи и т. д., И повторно использовать процесс аутентификации для нескольких компонентов.
Теперь они оба работают. И мне удалось собрать эти 2 вместе, написав:
inModal(needsAuthentication(DisableAccount))
Моя проблема в том, что inModal нужен компонент, способный обрабатывать свойство, называемое «модальным», а needAuthentication требуется, чтобы компонент мог обрабатывать свойство «auth». До сих пор это было нормально, потому что я всегда использовал эти 2 HOC в комбинации. Но теперь я создаю компомент, который не работает внутри модального окна, но требует аутентификации.
Здесь моя проблема с пониманием HOC и flowtype становится реальной проблемой.
Я создал новый компонент, которому необходимо передать свойство, но я не могу определить свои потребности Authentication HOC, чтобы вернуть компонент, принимающий это конкретное свойство, поскольку это нарушит все остальное. Я мог бы сделать свой новый компонент способным обрабатывать модальное свойство и проложить себе путь через эти джунгли, но я бы предпочел попытаться действительно полностью разобраться в этом вопросе.
Я посмотрел на это, но мой уровень разочарования / замешательства уже очень высок, поэтому я не могу понять все это.
Это должно продемонстрировать мою проблему
Я был бы очень рад, если бы кто-нибудь помог мне разобраться.





Как видно из здесь, это можно сделать, используя магический тип «любой». Но это похоже на использование «кувалды». Так что я пока не принимаю это.