Реагировать. Плохо ли, если презентационные компоненты содержат контейнерные компоненты?

согласно https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.i63w9pvzw

презентационные компоненты:

  • может содержать как презентационные, так и контейнерные компоненты** внутри и обычно иметь некоторую разметку DOM и собственные стили.
  • не имеют зависимостей от остальной части приложения, таких как действия потока или магазины.

Я думаю, если презентационных компоненты содержат компоненты контейнера, они будут зависеть от потока или Redux (или независимо от того, от чего зависят компоненты контейнера).

это затруднит тестирование и повторное использование презентационных компонентов.

1 ответов


это не плохо, это прекрасно. Весь смысл react-redux позволить вам соединить компоненты контейнера сразу к магазину без пройти весь магазин вниз с каждого компонента как упорка. Повторное использование компонентов не является проблемой, так как <Provider> компонент заставит любые подключенные компоненты контейнера работать в любом месте под ним.

это на самом деле не трудно проверить компоненты контейнера либо. Можно сделать связанный компонент экспортом по умолчанию, но также экспортируйте несвязанный компонент как именованный экспорт, который можно использовать для тестов, и вручную передайте его реквизит в этих тестах. См. раздел "подключенные компоненты" "написание тестов" часть документов Redux для получения дополнительной информации.

Что касается тестирования презентационных компонентов, содержащих компоненты контейнера, это не будет проблемой. Неглубокий рендер по-прежнему будет отлично работать в тестах (если вы не сталкиваетесь с этот вопрос). И если вам нужно установить компонент в тесте, вы всегда можете обернуть его в <Provider> компонент магазина для конкретного теста.

Edit: этот ответ специфичен для Redux с react-redux. Другие реализации Flux могут иметь некоторые трудности с этим, о которых я не знаю.