В чем разница между компонентом и контейнером в React redux?
javascript
reactjs
redux
Станислав Майоров
источник
источник
Ответы:
Component
является частью React API. Компонент - это класс или функция, описывающая часть пользовательского интерфейса React.Контейнер - это неформальный термин для компонента React, который
connect
связан с хранилищем redux. Контейнеры получают обновления состояния иdispatch
действия Redux , и они обычно не отображают элементы DOM; они делегируют рендеринг презентационным дочерним компонентам.Подробнее читайте в статье Дэна Абрамова о компонентах презентации и контейнера .
источник
Компонент, который отвечает за выборку и отображение данных, называется интеллектуальными или контейнерными компонентами. Данные могут поступать из redux, любого сетевого вызова или сторонней подписки.
Тупые / презентационные компоненты - это те, которые отвечают за представление представления на основе полученных реквизитов.
Хорошая статья с примером здесь
https://www.cronj.com/blog/difference-container-component-react-js/
источник
Компоненты составляют часть представления, поэтому оно должно отображать элементы DOM, помещать контент на экран.
Контейнеры участвуют в обработке данных, поэтому он должен «разговаривать» с redux, потому что ему нужно будет изменить состояние. Итак, вы должны включить connect ( react- redux ), что он делает соединение, и функции mapStateToProps и mapDispatchToProps :
источник
Составные части
Компоненты позволяют разделить пользовательский интерфейс на независимые, повторно используемые части и рассматривать каждую часть отдельно. Их иногда называют «презентационными компонентами», и главное - как все выглядит.
Контейнеры
Контейнеры похожи на компоненты без пользовательского интерфейса, а контейнеры связаны с тем, как все работает. , В основном он обращается к хранилищу redux для получения и обновления данных.
см. сравнение таблиц из Redux doc
Подробное объяснение https://redux.js.org/basics/usage-with-react#presentational-and-container-components
источник
Они оба являются компонентами; контейнеры являются функциональными, поэтому они не отображают HTML-код сами по себе, а также у вас есть презентационные компоненты, в которых вы пишете фактический HTML. Цель контейнера - отображать состояние и отправку на свойства для презентационного компонента.
Дополнительная литература: Ссылка
источник
React, Redux - это независимые библиотеки.
React предоставляет вам основу для создания HTML-документов. Компоненты в некотором роде представляют определенную часть документа. Затем методы, связанные с компонентом, могут управлять самой конкретной частью документа.
Redux - это фреймворк, который предписывает определенную философию хранения и управления данными в средах JS. Это один большой JS-объект с определенными определенными методами, лучший вариант использования - это управление состоянием веб-приложения.
Поскольку React предписывает, чтобы все данные передавались от корня к листьям, становится утомительно управлять всеми props, определяя props в компонентах и затем передавая props определенным props дочерним элементам. Это также делает уязвимым все состояние приложения.
React Redux предлагает чистое решение, в котором он напрямую подключает вас к хранилищу Redux, просто оборачивая подключенный компонент вокруг другого компонента React (вашего
Container
). Поскольку в вашей реализации вы уже определили, какая часть всего состояния приложения вам нужна. Такconnect
что извлекает эти данные из хранилища и передает их как свойства компоненту, который окружает себя.Рассмотрим этот простой пример:
connect
функция передает опоруtype
.Таким образом, соединение действует как контейнер для компонента Person.
источник
В React есть два основных компонента: первый - умный (контейнеры), второй - тупой (компонент презентации). Контейнеры очень похожи на компоненты, с той лишь разницей, что контейнеры знают о состоянии приложения. Если часть вашей веб-страницы используется только для отображения данных (тупой), сделайте ее компонентом. Если вам нужно, чтобы он был умным и знал о состоянии (при изменении данных) в приложении, сделайте его контейнером.
источник