Ранее я читал подобные вопросы, но никто, кажется, не исправил мою проблему, что я пытаюсь выполнить. Я должен быть слепым или непонимающим что-то принципиально.
Мой пример кода следующий:
Когда я вставляю компоненты, я получаю следующую структуру:
<Provider store={store}>
{ /* container component connected via redux (has as you can see props.children) */ }
<Navigation>
{ /* presentational component */ }
<Main>
{ /* container component connected via redux */ }
<Counter />
</Main>
</Navigation>
</Provider>
Хотя это кажется довольно интуитивным, я получаю странные ошибки, которые я не могу объяснить (было бы хорошо, если бы кто-то мог). В браузере ошибка:
You must pass a component to the function returned by connect. Instead received undefined
You must pass a component to the function returned by connect. Instead received undefined
(Navigation.tsx). Я даже не уверен, связана ли ошибка с вложенными компонентами. Когда я изменяю счетчик, представляющий собой компонент, все работает так, как ожидалось. В машинописном документе или моей реализации возникают проблемы с контейнерами внутри уже подключенных компонентов.
В песочнице ошибка, похоже, исходит от составления counter
внутри main
. Я что-то упускаю? Может быть, тип?
Я понимаю, что я могу решить эту проблему путем вложения только внутри моего верхнего уровень navigation
отображения контейнера/подключения только один раз в магазине, но это не решение, которое я ищу. Я бы предпочел воспользоваться советом https://stackoverflow.com/questions/34214208/why-redux-suggests-to-only-connect-to-top-level-components.
Заранее спасибо за помощь.
Редактировать:
Хотя @Tomasz решил ошибку, я не понимаю, почему это происходит. Сбой через https://www.typescriptlang.org/docs/handbook/module-resolution.html тоже не помог. Является ли это несколько типовым для экспорта index.js
? Если кто-то может добавить разъяснения, это может быть полезно.
Я не могу объяснить, что такое фактическая ошибка, но есть проблема с импортом из компонентов /index.tsx.
Корректирующий контейнер /Counter.tsx:
import CounterComponent from "../components/Counter";
и контейнер /Navigation.tsx
import NavigationComponent from "../components/Navigation";
ошибка, с которой происходит connect
, исчезнет.
Интересно, если вы измените следующее в контейнере /Counter.tsx
import * as all from '../components';
console.log(all)
Ранее ваш код регистрирует пустой объект. Как только я изменил импорт до вышеописанного, он регистрирует весь объект с компонентами в качестве записей.
index.js
все время. Теперь мне нужно указать фактический модуль, который меня интересует? Почему тогда это работает в constants
?
import * as all from '../components';
all
будет полным объектом. Не уверен, почему это все же ...
console.log("Counter", CounterComponent);
журналы"Counter, undefined"