2016-12-06 2 views
2

Я взламываю React/Redux и строю много контейнеров и компонентов.Можно ли положить контейнер в компонент в Redux?

Однако недавно я столкнулся дизайн выбор, который я сделал, что сделал на моих элементов выглядеть следующим образом:

enter image description here

Мой вопрос заключается в следующем дизайн OK? В основном я борюсь за то, как передать Redux Actions до кнопки, так как кнопка находится на нескольких уровнях. Я мог бы продолжать передавать действия вниз компоненту в компонент из HeaderContainer, но если DOM станет глубже, это будет все хуже и хуже.

Я чувствую, что этот дизайн НЕПРАВИЛЬНО, поскольку данный компонент вызывает компонент контейнера.

Любые мысли?

+0

Привет, я не понимаю, почему вам нужно подключиться к магазину в первую очередь просто для отправки действий? Вы должны подключиться к хранилищу, только если ваш компонентный рендеринг должен прослушивать изменения в хранилище ... –

+0

«Представляющий компонент вызывает компонент контейнера». Дэн Абрамов говорит, что это [штраф] (https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.ssq4o7wml) –

ответ

1

У вас есть три варианта:

  • Во-первых, чтобы непосредственно подключить компонент кнопки в магазин и пусть это будет как контейнер & презентационный компонент. Простой и эффективный.

    export default connect(mapStateToProps, mapDispatchToProps)(ButtonComponent)

    Смотрите пример от создателя Redux here (4-й пост)

  • Во-вторых, создать контейнер, чтобы обернуть кнопку, и пусть кнопку только презентационный - текущая реализация. Очень хорошая многоуровневая архитектура, но для меня это было перестроено.

  • В-третьих, необходимо пройти действие от HeaderComponentContainer до ButtonComponent.


Я хотел бы пойти на третий, если кнопка не более 2 уровней вложенности, так как вы уже подключили HeaderComponentContainer и как родитель это его ответственность, чтобы определить, какие функции ее дети должны обеспечить (они только присутствуют, верно?).

PS. Вы можете использовать React's context, чтобы передать действия/свойства в арбитраж глубоко в иерархии, не делая явно для каждого компонента.

+0

Если я правильно понял, текущая реализация у меня есть, в основном, вторая. Создайте контейнерный компонент, чтобы обернуть компонент кнопки. Звучит неплохо? Я просто хотел убедиться, что это правильный шаблон. – kidcapital

+0

Я предпочитаю использовать '@ connect' на наших презентационных компонентах. См. [Почему] (http://stackoverflow.com/a/40711713/5069226). –

Смежные вопросы