Я думаю, что вы просто не можете использовать connect()
без <Provider/>
- это зависит от того, какой шаблон следует.Если вы хотите использовать connect()
, подключенный компонент должен быть потомком поставщика.Пример, который вы предложили включить <Provider/>
в вызов connect()
, не будет работать, так как:
a) Этот метод принимает класс компонента реагирования, а не уже созданный экземпляр элемента реакции, и b)Даже тогда он создает класс компонента, который после создания / монтирования проверяет контекст для хранилища, и это происходит как выше (в терминах DOM-иерархии) провайдера, который создает контекст, так и до его монтирования и имеетшанс создать этот контекст.
В чем причина, по которой вы против использования <Provider/>
?Вы пытаетесь оптимизировать преждевременно, потому что думаете, что включение провайдера в корень вашего приложения окажет некоторое влияние на производительность?Если это так, я думаю, что вы можете обнаружить, что от его включения нет заметного влияния, или если вы его испытываете, я бы предположил, что проблема может быть в настройке ваших редукторов, а не просто в использовании <Provider/>
.
Если вы абсолютно не используете редуктор, вы можете взять свой объект Store
(возвращаемый из того места, куда вы звоните createStore()
), и в componentDidMount()
вашего единственного компонента, который нуждается в нем.Вы можете store.subscribe()
прослушать изменения состояния, затем использовать store.getState()
, чтобы получить эти изменения и загрузить их в состояние.Но в конце концов вы обнаружите, что вы просто переопределяете <Provider/>
, хотя, возможно, без контекстной части.
TL; DR: звучит как XY проблема