Прежде всего, эти рекомендации не являются частью библии
Вы должны написать код, который легко обосновать для ВЫ и вашей КОМАНДЫ .
Я думаю, что вы что-то упустили, Контейнер-редуктор отличается от Реактивного Контейнера.
Я имею в виду, connect
создаст контейнер для вас, это не значит, что упакованный компонент Контейнер.
По сути, вы можете экспортировать обе версии из одного и того же файла: Контейнер (подключенная версия) и презентационная версия (не подключенная).
Другая вещь, которая обычно сбивает людей с толку, - это имя функции и аргумент mapStateToProps
.
Я предпочитаю имя mapStoreToProps
, как в
mapredux
сохранить для реквизита компонента.
имя state
может сбивать с толку, когда мы находимся в контексте react
.
Редактировать
Как продолжение вашего комментария:
Я совершенно не знал, что эти два на самом деле разные.Не могли бы вы рассказать мне подробнее
Они отличаются тем, что connect
создает для вас «Контейнер».
connect
- это компонент высокого порядка, который создает для нас контейнерный компонент со всеми функциями логики + подписки для передачи частей магазина и создателей действий его дочерним элементам в качестве подпорок (mapStateToProps
& mapDispatchToProps
).
«Нормальный» Контейнер обычно относится к компоненту, который вы пишете от руки, часто он не имеет отношения к тому, как все должно выглядеть, но вместо этого имеет дело с определенной логикойприложение.
Что касается других комментариев, таких как
Соединительный HoC response-redux просто внедряет свойства, которые вы можете запросить, в свой компонент.Он возвращает новый компонент, который обернут вокруг вашего компонента, так что он может обновлять ваш компонент всякий раз, когда изменяется состояние, в котором вы заинтересованы в хранилище приращений
Как я уже упоминал выше, это частично верно.Это не просто внедрение свойств в наш компонент, его подписка на магазин, получение его из Provider
(через context
) и выполнение всего этого с учетом оптимизации, поэтому нам не придется делать это самостоятельно,
Я не уверен, как mapStateToProps может кого-то запутать.Мы говорим о библиотеке управления состоянием
Я видел некоторых разработчиков, которые неправильно поняли это, потому что react
имеет state
, а redux
имеет store
(по крайней мере, так оно и есть)был вызван в большинстве учебных пособий и документации).
это может сбить с толку некоторых людей, которые плохо знакомы с react
или redux
.
Редактировать 2
Это было немного странно из-за предложения «это не означает, что упакованный компонент является контейнером».Почему упакованный компонент не является контейнером?Разве компонент, созданный методом connect, также не является контейнером?
Я имею в виду, что созданный вами завернутый компонент не обязательно должен быть Контейнером.
Вы можетеподключить компонент «Презентация»:
const Link = ({ active, children, onClick }) => {
if (active) {
return <span>{children}</span>
}
return (
<a
href=""
onClick={e => {
e.preventDefault()
onClick()
}}
>
{children}
</a>
)
}
// ...
export default connect(mapState, mapDispatch)(Link)