Не так давно go Дэн обновил свою статью о Презентационных и контейнерных компонентах , сказав, что с крючками нам не нужны connect()
и контейнеры больше. Но я не могу понять, что же такое прибыльные взгляды, так тесно связанные с моделью. Теперь компонент должен знать, где и как получить данные, которые делают его гораздо менее изолированным, что, на мой взгляд, очень большой минус
Например, у меня есть ProgressBar
компонент, который имеет только одну подпорку - ширина
const ProgressBar = (props) => (
<div style={{ width: `${props.width}%` }} className={styles['progress-bar']}></div>
);
Я мог бы использовать этот компонент в любом месте, зная его контракт: он занимает одну ширину опоры. Сам компонент не знает о реквизитах, и, по моему мнению, это делает фиктивные компоненты великолепными.
В контейнерном компоненте я собираю данные из хранилища и отправляю их в фиктивный компонент, и я думаю, что это делает код очень ясным.
Без контейнера ProgressBar
компонент должен самостоятельно собирать данные из хранилища:
const ProgressBar = () => {
const width = useSelector(state => state.progress.width);
return (
<div style={{ width: `${width}%` }} className={styles['progress-bar']}></div>
);
}
В этом случае:
- Для работы View следует знать структуру of store (Модель)
- Глядя на компонент, я не знаю о контракте и должен прочитать весь код внутри него, чтобы получить то, что нужно для работы
- Я не могу повторно использовать его в других компонентах если я хочу, чтобы данные собирались не в магазине