Вложение подключенных редукционных контейнеров и презентационных компонентов в машинописный текст

2

Ранее я читал подобные вопросы, но никто, кажется, не исправил мою проблему, что я пытаюсь выполнить. Я должен быть слепым или непонимающим что-то принципиально.

Мой пример кода следующий:

Изображение 10034

Когда я вставляю компоненты, я получаю следующую структуру:

<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? Если кто-то может добавить разъяснения, это может быть полезно.

  • 0
    console.log("Counter", CounterComponent); журналы "Counter, undefined"
Теги:
redux
containers

1 ответ

1
Лучший ответ

Я не могу объяснить, что такое фактическая ошибка, но есть проблема с импортом из компонентов /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)

Ранее ваш код регистрирует пустой объект. Как только я изменил импорт до вышеописанного, он регистрирует весь объект с компонентами в качестве записей.

  • 0
    Вот это да. Это действительно работает (+1 незначительная ошибка в коде). Это нормально? Я привык экспортировать через index.js все время. Теперь мне нужно указать фактический модуль, который меня интересует? Почему тогда это работает в constants ?
  • 0
    @proxylittle Это на самом деле работает ... измените импорт на выше, а затем, если вы делаете import * as all from '../components'; all будет полным объектом. Не уверен, почему это все же ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню